Habe jetzt nochmal einen neuen Code nach Dirks Vorlage geschrieben aber das Display bleibt dunkel.
Kann es sein das ich bereits beim Initialisieren des TWI was verbockt habe?
Z.B. SCL falsch eingestellt?
Die MCU läuft mit 1Mhz und SDA und SCL sind mit 4,7Kohm nach +5V verbunden.
Hier der neue Code
Kann es sein das ich bereits beim Initialisieren des TWI was verbockt habe?
Z.B. SCL falsch eingestellt?
Die MCU läuft mit 1Mhz und SDA und SCL sind mit 4,7Kohm nach +5V verbunden.
Hier der neue Code
Code:
.include"m8def.inc"
rjmp init
init:
ldi r16,high(ramend)
out sph,r16
ldi r16,low(ramend)
out spl,r16
ldi r17,0xE0 ;Slave Adresse
sei ;interrupts aktivieren
;initialisiere TWI
ldi r16,0b00000000 ;SCL Prescaler /1
out TWSR,r16
ldi r16,20 ;Bit rate generator Prescaler
out TWBR,r16
;initialisiere Slave
;Oszillator einschalten
; *** START Condition senden ***
ldi r16, (1<<TWINT) | (1<<TWSTA) | (1<<TWEN)
out TWCR, r16
rcall wait_i2c
; *** Adresse + R/W Bit senden ***
out TWDR, r17 ; Adresse + R/W bit
ldi r16, (1<<TWINT) | (1<<TWEN)
rcall wait_i2c
; *** Datenbyte senden ***
ldi r16,0x21 ;Oszillator einschalten
out TWDR, r16
ldi r16, (1<<TWINT) | (1<<TWEN)
rcall wait_i2c
; *** STOP senden ***
ldi r16, (1<<TWINT) | (1<<TWSTO) | (1<<TWEN)
out TWCR, r16
rcall wait_stop
;Blinken aus,Display ein
; *** START Condition senden ***
ldi r16, (1<<TWINT) | (1<<TWSTA) | (1<<TWEN)
out TWCR, r16
rcall wait_i2c
; *** Adresse + R/W Bit senden ***
out TWDR, r17 ; Adresse + R/W bit
ldi r16, (1<<TWINT) | (1<<TWEN)
rcall wait_i2c
; *** Datenbyte senden ***
ldi r16,0x81 ;Blinken aus,Display ein
out TWDR, r16
ldi r16, (1<<TWINT) | (1<<TWEN)
rcall wait_i2c
; *** STOP senden ***
ldi r16, (1<<TWINT) | (1<<TWSTO) | (1<<TWEN)
out TWCR, r16
rcall wait_stop
;Max Helligkeit
; *** START Condition senden ***
ldi r16, (1<<TWINT) | (1<<TWSTA) | (1<<TWEN)
out TWCR, r16
rcall wait_i2c
; *** Adresse + R/W Bit senden ***
out TWDR, r17 ; Adresse + R/W bit
ldi r16, (1<<TWINT) | (1<<TWEN)
rcall wait_i2c
; *** Datenbyte senden ***
ldi r16,0xEF ;Max Helligkeit
out TWDR, r16
ldi r16, (1<<TWINT) | (1<<TWEN)
rcall wait_i2c
; *** STOP senden ***
ldi r16, (1<<TWINT) | (1<<TWSTO) | (1<<TWEN)
out TWCR, r16
rcall wait_stop
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;Display Anzeige 88:88
anzeige:
; *** START Condition senden ***
ldi r16, (1<<TWINT) | (1<<TWSTA) | (1<<TWEN)
out TWCR, r16
rcall wait_i2c
; *** Adresse + R/W Bit senden ***
out TWDR, r17 ; Adresse + R/W bit
ldi r16, (1<<TWINT) | (1<<TWEN)
rcall wait_i2c
; *** Startadresse senden ***
ldi r16,0x00 ;Startadresse
out TWDR, r16
ldi r16, (1<<TWINT) | (1<<TWEN)
rcall wait_i2c
; *** Datenbyte 0 senden ***
ldi r16,0x00 ;Byte0,nicht genutzt
out TWDR, r16
ldi r16, (1<<TWINT) | (1<<TWEN)
rcall wait_i2c
; *** Datenbyte 1 senden ***
ldi r16,0x7f ;Byte1,1000er,8
out TWDR, r16
ldi r16, (1<<TWINT) | (1<<TWEN)
rcall wait_i2c
; *** Datenbyte 2 senden ***
ldi r16,0x00 ;Byte2,nicht genutzt
out TWDR, r16
ldi r16, (1<<TWINT) | (1<<TWEN)
rcall wait_i2c
; *** Datenbyte 3 senden ***
ldi r16,0x7f ;Byte3,100er,8
out TWDR, r16
ldi r16, (1<<TWINT) | (1<<TWEN)
rcall wait_i2c
; *** Datenbyte 4 senden ***
ldi r16,0x00 ;Byte4,nicht genutzt
out TWDR, r16
ldi r16, (1<<TWINT) | (1<<TWEN)
rcall wait_i2c
; *** Datenbyte 5 senden ***
ldi r16,0xff ;Byte5,Doppelpunkt,ein
out TWDR, r16
ldi r16, (1<<TWINT) | (1<<TWEN)
rcall wait_i2c
; *** Datenbyte 6 senden ***
ldi r16,0x00 ;Byte6,nicht genutzt
out TWDR, r16
ldi r16, (1<<TWINT) | (1<<TWEN)
rcall wait_i2c
; *** Datenbyte 7 senden ***
ldi r16,0x7f ;Byte7,10er,8
out TWDR, r16
ldi r16, (1<<TWINT) | (1<<TWEN)
rcall wait_i2c
; *** Datenbyte 8 senden ***
ldi r16,0x00 ;Byte8,nicht genutzt
out TWDR, r16
ldi r16, (1<<TWINT) | (1<<TWEN)
rcall wait_i2c
; *** Datenbyte 9 senden ***
ldi r16,0x7f ;Byte9,1er,8
out TWDR, r16
ldi r16, (1<<TWINT) | (1<<TWEN)
rcall wait_i2c
; *** STOP senden ***
ldi r16, (1<<TWINT) | (1<<TWSTO) | (1<<TWEN)
out TWCR, r16
rcall wait_stop
rjmp anzeige
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;Unterprogramme
wait_i2c:
in r16,TWCR
sbrs r16,TWINT
rjmp wait_i2c
ret
wait_stop:
in r16,TWCR
sbrs r16, TWSTO
rjmp wait_stop
ret