Hallo,
seit einer Woche versuche ich nun schon, einen SPI EEPROM zu verwenden.
Das Programm soll einfach 5 Zeichen in dem EEPROM speichern und wieder auslesen. Zum Test lasse ich die ID des EEPROMs auslesen.
Als Ergebnis erhalte ich die ID einwandfrei, aber da, wo die gespeicherten Daten erscheinen sollen, bekomme ich nur $FF zurück. Keine Ahnung, ob es beim Speichern oder Zurücklesen nicht funktioniert.Die Signale kann ich mit dem Oszilloskop sehen und da das Auslesen der ID funktioniert, gehe ich davon aus, daß alle Anschlüsse funktionieren.
Hier das Testprogramm:
Alles anzeigen
Ich hoffe, daß mir hier jemand helfen kann.
Danke schon mal.
MFG
Torsten Müller
seit einer Woche versuche ich nun schon, einen SPI EEPROM zu verwenden.
Das Programm soll einfach 5 Zeichen in dem EEPROM speichern und wieder auslesen. Zum Test lasse ich die ID des EEPROMs auslesen.
Als Ergebnis erhalte ich die ID einwandfrei, aber da, wo die gespeicherten Daten erscheinen sollen, bekomme ich nur $FF zurück. Keine Ahnung, ob es beim Speichern oder Zurücklesen nicht funktioniert.Die Signale kann ich mit dem Oszilloskop sehen und da das Auslesen der ID funktioniert, gehe ich davon aus, daß alle Anschlüsse funktionieren.
Hier das Testprogramm:
BASCOM-Quellcode
- $regfile = "m328pdef.dat"
- $crystal = 16000000 ' oder enstprechende Taktfrequenz
- $loadersize = &H800
- $hwstack = 60
- $swstack = 60
- $framesize = 80
- $baud = 1200
- Dim B As Byte
- B = 2
- Config Portb.3 = Output
- Config Portb.2 = Output
- Config Portb.5 = Output
- Config Pinb.4 = Input
- Dim A(10) As Byte
- Config Spi = Hard , Interrupt = Off , Data Order = Msb , Master = Yes , Polarity = Low , Phase = 0 , Clockrate = 128 , Noss = 0
- Spiinit
- $asm
- cbi portb,2 'Chip Select auf Low
- nop
- ldi r16,&H06 'write enable
- Out Spdr , R16 'Kommando senden
- Wait2:
- sbis spsr,spif 'Warten bis alles gesendet
- rjmp wait2
- sbi portb,2 'CS wieder high
- nop
- nop
- cbi portb,2 'Chip Select auf Low
- ldi r16,2 '2=schreiben
- Out Spdr , R16 'Kommando senden
- Wait3:
- sbis spsr,spif 'Warten bis alles gesendet
- rjmp wait3
- ldi r17,0 'Adresse highbyte
- Out Spdr , R17 'Kommando senden
- Wait11:
- sbis spsr,spif 'Warten bis alles gesendet
- rjmp wait11
- ldi r18,5 'Adresse midbyte
- Out Spdr , R18 'Kommando senden
- Wait12:
- sbis spsr,spif 'Warten bis alles gesendet
- rjmp wait12
- ldi r19,0 'Adreese lowbyte
- Out Spdr , R19 'Kommando senden
- Wait13:
- sbis spsr,spif 'Warten bis alles gesendet
- rjmp wait13
- ldi r16,&h61 '61=b
- Out Spdr , R16 'senden
- Wait14:
- sbis spsr,spif 'Warten bis alles gesendet
- rjmp wait14
- ldi r16,&h62 '62=c
- Out Spdr , R16 'senden
- Wait15:
- sbis spsr,spif 'Warten bis alles gesendet
- rjmp wait15
- ldi r16,&h63 '63=d
- Out Spdr , R16 'senden
- Wait16:
- sbis spsr,spif 'Warten bis alles gesendet
- rjmp wait16
- ldi r16,&h64 '64=e
- Out Spdr , R16 'senden
- Wait17:
- sbis spsr,spif 'Warten bis alles gesendet
- rjmp wait17
- ldi r16,&h65 '65=f
- Out Spdr , R16 'senden
- Wait18:
- sbis spsr,spif 'Warten bis alles gesendet
- rjmp wait18
- nop
- nop
- sbi portb,2
- $end Asm
- Do
- $asm
- cbi portb,2 'Chip Select auf Low
- ldi r20,&h9f 'ID lesen -Kommando
- Out Spdr , R20 'Kommando senden
- Wait26:
- sbis spsr,spif 'Warten bis alles gesendet
- rjmp wait26
- ldi r20,0
- Out Spdr , R20 'Dummy senden damit Takt ausgegeben wird
- Wait29:
- sbis spsr,spif 'Warten bis alles gesendet
- rjmp wait29
- in r16,spdr
- rcall serout
- Out Spdr , R20
- Wait6:
- sbis spsr,spif 'Warten bis alles gesendet
- rjmp wait6
- in r16,spdr
- rcall serout
- Out Spdr , R20
- Wait7:
- sbis spsr,spif 'Warten bis alles gesendet
- rjmp wait7
- in r16,spdr
- rcall serout
- sbi portb,2 'Chip Select auf High
- $end Asm
- $asm
- cbi portb,2 'Chip Select auf Low
- ldi r20,&h03 '03 = READ
- Out Spdr , R20 'Kommando senden
- Wait30:
- sbis spsr,spif 'Warten bis alles gesendet
- rjmp wait30
- ldi r20,0 'Adresse High
- Out Spdr , R20 'Byte senden
- Wait31:
- sbis spsr,spif 'Warten bis alles gesendet
- rjmp wait31
- ldi r20,5 'Adresse mid
- Out Spdr , R20 'Byte senden
- Wait32:
- sbis spsr,spif 'Warten bis alles gesendet
- rjmp wait32
- ldi r20,0 'Adresse Low
- Out Spdr , R20 'Byte senden
- Wait33:
- sbis spsr,spif 'Warten bis alles gesendet
- rjmp wait33
- ldi r20,0
- Out Spdr , R20 'Dummy senden
- Wait34:
- sbis spsr,spif 'Warten bis alles gesendet
- rjmp wait34
- in r16,spdr 'Wert einlesen
- rcall serout 'An UART senden
- Out Spdr , R20
- Wait35:
- sbis spsr,spif 'Warten bis alles gesendet
- rjmp wait35
- in r16,spdr
- rcall serout
- Out Spdr , R20
- Wait36:
- sbis spsr,spif 'Warten bis alles gesendet
- rjmp wait36
- in r16,spdr
- rcall serout
- Out Spdr , R20
- Wait37:
- sbis spsr,spif 'Warten bis alles gesendet
- rjmp wait37
- in r16,spdr
- rcall serout
- Out Spdr , R20
- Wait38:
- sbis spsr,spif 'Warten bis alles gesendet
- rjmp wait38
- in r16,spdr
- rcall serout
- Out Spdr , R20
- Wait39:
- sbis spsr,spif 'Warten bis alles gesendet
- rjmp wait39
- in r16,spdr
- rcall serout
- sbi portb,2 'Chip Select auf High
- ldi r16,&h70 '$70 nur für Test an UART senden
- rcall serout
- jmp readend
- $end asm
- $asm
- Serout:
- sbis ucsr0a,udre0
- rjmp serout
- Out Udr , R16
- ret
- Readend:
- $end Asm
- Wait 2
- Loop
- End
Danke schon mal.
MFG
Torsten Müller