-         

Ergebnis 1 bis 3 von 3

Thema: Problem mit der USI Start detection

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    23.02.2008
    Beiträge
    9

    Problem mit der USI Start detection

    Anzeige

    Hallo,

    ich versuche schon seit einigen Tagen die USI als TWI am Attiny2313 zum laufen zu bekommen doch irgendwie gelingt es mir nicht. Ich habe einen Atmega8 als Master und der Attiny stellt den Slave da. Als Pull-Ups habe ich jeweils 4,7kOhm Wiederstände an den Leitungen. Am Ende des Projektes sollen noch mehrere Slaves hinzukommen darum viel die Wahl auf I2C.

    Der Atmega8 spricht gutes I2C das habe ich mit einem anderen Atmega getestet. Das Problem liegt darin das die Start detection des Attiny's meinen Interrupt nicht auslöst. Ich möchte ersteinmal nur das der tiny einen START auf dem Bus erkennt. Ich sitze da schon ne ganze weile dran und wahrscheinlich ist es nur ein kleiner Fehler den ich übersehe aber langsam sehe ich die richtigen Register einstellungen vor lauter USI Artikeln nichtmehr

    Achso beide laufen mit einem 16Mhz quarz.

    Hier mal die main vom tiny. Ist noch nicht viel aber wie gesagt ich hänge ja schon bei der Start detection.
    Code:
    #include <avr/io.h>
    #include <avr/interrupt.h>
    #include "usi/usi.h"
    
    ISR(USI_START_vect)
    {
    	PORTD |= (1<<PD1);
    	//USISR |= (1<<USISIF);
    }
    
    ISR(USI_OVERFLOW_vect)
    {
    	PORTD |= (1<<PD1);
    	//USISR |= (1<<USISIF);
    }
    
    int main(void)
    {
    	DDRD |= (1<<PD1)|(1<<PD0);
    	PORTD |= (1<<PD1)|(1<<PD0);
    	cli();
    	initI2C();
    	i2cSetStartInterrupt();
    	sei();
    	PORTD &= ~(1<<PD1);
    	while(1)
    	{
    		PORTD &= ~(1<<PD0);
    	}
    	return 0;
    }
    Ich habe 2 LED's an PD0 und PD1 als Indicatoren fürs funktionieren.

    Und hier die zugehörige usi.c
    Code:
    #include <avr/io.h>
    /** @brief initI2C
    *
    * @todo: document this function
    */
    void initI2C()
    {
    	DDRB |= (1<<PB7);
    	DDRB |= (1<<PB5);
    	PORTB |= (1<<PB7);
    	PORTB |= (1<<PB5);
    	DDRB &= ~(1<<PB5);
    	USICR = (1<<USISIE) | (1<<USIOIE) | (1<<USIWM1) | (1<<USIWM0) | (1<<USICS1) | (0<<USICS0) | (0<<USICLK) | (0<<USITC);
    	USISR = 0xf0;
    }
    /** @brief i2cSetStartInterrupt
    *
    * @todo: document this function
    */
    void i2cSetStartInterrupt()
    {
    	USICR |= (1<<USISIE);
    }
    Geändert von radbruch (29.06.2011 um 23:46 Uhr) Grund: HTML-Tags aus dem Beitrag entfernt. (ohne Gewähr)

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    26.08.2006
    Beiträge
    84
    PB7 bleibt Ausgang?

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    23.02.2008
    Beiträge
    9
    So update. Ich habe es jetzt hinbekommen. Es lag nicht am Code sondern an der IDE die ich verwendet hatte. Hatte hierbei zum ersten mal Codeblocks verwendet. Das direkte Problem lag darin das wenn ich den Code mit Codeblocks compiliert habe dann wurden die Globalen Interrupts im Code nicht aktiviert. Höchstwahrscheinlich hab ich da wahrscheinlich falsche Einstellungen getätigt. NAchdem ich dann auf Assembler und Avra als Compiler umgestiegen bin, hats auf Anhieb funktioniert obwohl der Code semantisch das selbe beschreibt.

Ähnliche Themen

  1. Low Voltage Detection
    Von PICuin im Forum PIC Controller
    Antworten: 0
    Letzter Beitrag: 22.05.2011, 23:35
  2. Problem mit Start/Stop Taster
    Von Zizibee im Forum Robby RP6
    Antworten: 13
    Letzter Beitrag: 22.04.2010, 11:09
  3. RP6 Start Problem
    Von SRT im Forum Robby RP6
    Antworten: 4
    Letzter Beitrag: 09.08.2008, 09:29
  4. TWI Start-Problem: ATMEGA 16, STK-500
    Von Wasserzähler im Forum C - Programmierung (GCC u.a.)
    Antworten: 0
    Letzter Beitrag: 31.12.2007, 17:38
  5. Start Problem mit übertragung über RS232
    Von zwanzischmark im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 5
    Letzter Beitrag: 11.03.2005, 09:54

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •