- fchao-Sinus-Wechselrichter AliExpress         
Seite 3 von 3 ErsteErste 123
Ergebnis 21 bis 26 von 26

Thema: Hat jemand 3 oder 4 atmega´s schon verbunden??

  1. #21
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    30.09.2004
    Ort
    In der Nähe von Esslingen am Neckar
    Beiträge
    706
    Anzeige

    Powerstation Test
    Hi Pascal,
    wäre gut wenn du einen Quelltext mal posten würdest!
    Die Adresse wird doch im TWAR gesetzt, oder?
    Gruß Michi

  2. #22
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    10.08.2004
    Ort
    Großbardorf
    Alter
    37
    Beiträge
    674
    ja, die Addresse wird in TWAR gesetzt

    hier eine init-Methode:
    Code:
    void TWI_init(uchar ownaddr)
    {
    	TWAR = ownaddr;
    	TWCR = 0x45;
    	TWSR &= 0xFC;
    	TWBR = 0xA;
    }
    dann eine zum starten:
    Code:
    uchar TWI_start(uchar ndevaddr)
    {
    	uchar errcounter;
    	errcounter = 0;
    
    	TWCR = (1<<TWINT) | (1<<TWSTA) | (1<<TWEN);
    
    	while(!(TWCR & (1<<TWINT)));	 {
    		if(errcounter==10) {
    
    			errcounter = 0;
    			return 1;
    		}
    		errcounter++;
    	}
    	TWDR = ndevaddr;
    	TWCR = (1<<TWINT) | (1<<TWEN);
    	while(!(TWCR & (1<<TWINT)));
    	for(unsigned char i = 0; i < 20; i++)
    		asm("nop");
    	if( !((TWSR & 0xf8) == 0x18 ) ) {
    		return 1;
    	}
    
    	return 0;
    }
    zum senden:
    Code:
    void TWI_sendbyte(uchar nbyte)
    {
    
    	TWDR = nbyte;
    	TWCR = (1<<TWINT) | (1<<TWEN);
    	while(!(TWCR & (1<<TWINT))); 
    }
    und schließlich zum stoppen:
    Code:
    void TWI_stop(void)
    {
    
    	TWCR = (1<<TWINT) | (1<<TWSTO) | (1<<TWEN);
    	for(unsigned char i = 0; i < 40; i++)
    		asm("nop");
    
    	TWCR |= 0x45;
    	for(unsigned char i = 0; i < 40; i++)
    		asm("nop");
    
    }
    ob meine ganzen nops wirklich nötig sind, hab ich noch nicht ausprobiert, schaden wirds aber nicht

  3. #23
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    30.09.2004
    Ort
    In der Nähe von Esslingen am Neckar
    Beiträge
    706
    Hi Pascal,
    danke für die Codes!!
    Wie sieht dann so ein Slave aus?
    Gruß Michi

  4. #24
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    10.08.2004
    Ort
    Großbardorf
    Alter
    37
    Beiträge
    674
    meinst du, wie der Code für einen Slave aussehen kann?

    das kannst du alles in die ISR(Interrupt Service Routine) vom TWI reinschreiben, also besser wärs natürlich, wenn du in der ISR nur ein bestimmtes Bit setzt, worauf hin dann in der Hauptschleife die entsprechende Funktion aufgerufen wird
    in der ISR vom TWI kannst du mithilfe des TWSR abfragen, was grad passiert is, also zB, ob Daten empfangen wurden

    mir fällt grad auf, was ich vergessen hab...du musst am Anfang im Programm des Slaves noch Interrupts global aktivieren und "TWCR |= 0x80;" ausführen, sonst wirds nicht gehn

  5. #25
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    30.09.2004
    Ort
    In der Nähe von Esslingen am Neckar
    Beiträge
    706
    Hi Pascal,
    ok! Danke! Welche Bits im TWCR entscheiden ob ein Atmega Master oder Slave wird?
    Gruß Michi

  6. #26
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    10.08.2004
    Ort
    Großbardorf
    Alter
    37
    Beiträge
    674
    so direkt ein Master- oder Slave-Bit gibts net

    zum Master wird ein µC, wenn er START macht und der Bus frei ist, ansonsten muss er es nochmal versuchen, den Bus gibt er mi STOP wieder frei

    ein Slave ist ja im Prinzip ein µC, der auf Signale aufm TWI-Bus reagiert und dafür gibts das Bit TWEN und damit der Interrupt ausgelöst wird noch das TWIE, damit er Acknowledges sendet das TWEA und zu guter Letzt noch das TWINT, wenn das nicht gesetzt ist, reagiert er nicht auf den TWI-Bus

    ich hoffe mal, ich hab jetzt nichts durcheinander gebracht...

Seite 3 von 3 ErsteErste 123

Berechtigungen

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

12V Akku bauen