hallo leute ich habe vor kurzem das programmieren von micrcontrollern gelernt und macht mir echt spass. nun wollte ich mal zwei atmega48 über twi koppeln und ein paar befehle über ne rs232 zum master und anschliessend zum slave senden, leider bringe ich es trotz intensiefem studium der forenbeiträge nicht hin und das datasheet des atmega hilft mier auch nicht weiter. irgendwo muss de wurm drin sein ! ich währe froh wenn mir jemand den fehler aufzeigen könte damit ich das teil zum laufen kriege danke manu Slavedatei: .include "m48def.inc" .org 0x0000 rjmp Main ;Sprung zu Main Main: ;I/O Ports ldi r16, 0b11111111 ;Port B 0-7 als Ausgang out DDRB, r16 ldi r16, 0b11111111 ;Port B 0-7 als Ausgang out DDRC, r16 .def Empfang = r20 .def DATA =r22 ;Stack-Pointer ldi r16, LOW(RamEnd) out SPL, r16 ldi r16, High(RamEnd) out SPH, r16 ;TWI Einstellungen ldi r16,0b00000010 ;Slavadresse sts TWAR, r16 SBI portc,6 ;Start TWI TWIempfang_starten: ldi r22,0x0 ldi r16,(1<<TWEA)|(1<<TWEN) sts TWCR, r16 wait1: ldi r16,TWCR sbrs r16,TWINT rjmp wait1 ldi r16,TWSR ;andi r16, 0xF8 cpi r16, 0x60 breq wait2 rjmp wait1 wait2: ldi r16,TWCR sbrs r16,TWINT rjmp wait2 ldi r16,TWSR ;andi r16, 0xF8 cpi r16, 0x80 ldi r22,TWDR rjmp Daten_Auswerten cbi portc,6 ;ende der Übertragung Daten_Auswerten: ;Empfangsdaten-Auswertung cpi DATA, 'R' ;vergleiche r20 mit 'R' u.s.w macht dies für die nachfolgenden Daten weiter breq Rechtsfahren ;Springe zum Rechtslauf cpi DATA, 'L' breq Linksfahren reti Rechtsfahren: sbi portb,0 rjmp TWIempfang_starten Linksfahren: sbi portb,1 rjmp TWIempfang_starten
Hallo Manu, analysiere mal: Beitrag "TWI / I2C einf. MASTER SLAVE Beispiel(Assembler) ATmega8" Gruss Otto
Du weisst aber, das RS232 nicht mit TWI zu tun hat, oder ? Das ganze ist komplexer als Du wahrscheinlich denkst. Bevor ich hier ins "Eingemachte" gehe, stelle ich mir die Frage, ob Du überhaupt weisst, was Du da tust. Z.B.:
1 | ldi r16,TWCR |
Hier lädst Du nicht wie gewünscht das Controlregister in R22, sondern die Adresse des Controllregisters. Müsste also heissen:
1 | lds r16, TWCR |
Es gibt hier im Forum ein paar Codeschnipsel in Assembler, wo einfach ein Byte via TWI übertragen wird. Studiere dies durch, dann kommst Du auch weiter. LG EC
So, schau mal hier nach. Dann versuche das Ganze auf den MEGA48 umzuschreiben. Beitrag "TWI / I2C einf. MASTER SLAVE Beispiel(Assembler) ATmega8" LG EC
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.