Forum: Mikrocontroller und Digitale Elektronik TWI mit atmega48


von manu (Gast)


Angehängte Dateien:

Lesenswert?

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

von Otto (Gast)


Lesenswert?


von blac DAC (Gast)


Lesenswert?

Probier es in C zu programmieren, dann hilft dir vielleicht auch einer 
:)

von ecslowhand (Gast)


Lesenswert?

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

von ecslowhand (Gast)


Lesenswert?

So, schau mal hier nach.
Dann versuche das Ganze auf den MEGA48 umzuschreiben.

Beitrag "TWI / I2C einf. MASTER SLAVE Beispiel(Assembler) ATmega8"

LG EC

von manu (Gast)


Lesenswert?

habe das problem gefunde jetzt get er.

danke EC

lg manu

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
Noch kein Account? Hier anmelden.