Hi,
ich bin ganz neu in diesem Thema, habe mir MPLAB PICKit 1 zugelegt und
versuche mich im Assembler. Durch Tutorials habe ich geschafft LED
anzusteuern und zu toggeln.
So zur meiner Frage:
ist es möglich im PIC12F675 das EEPROM währed des Betriebs zu
beschreiben? Ich möchte den Status reinschreiben ob die LEDs an waren
oder nicht, damit wenn der PIC Strom verliert/ausgeschaltet wird zu
seinem Zustand zurück kehrt LED an/aus.
Ich habe auf der sprut.de Seite ein Tutorial dazu gefunden, der bezieht
sich aber auf einen anderen PICPIC16F87x. Die Bänke habe ich versucht
soweit anzupassen aber mir ist aufgefallen das der PIC12F675 keien EEPGD
Register hat. Ist es trotzdem möglich EEPROM zu beschreiebn?
Die Assembler Datei ist im Anhang, wenn sich das jemand angucken möchte.
Vielen Dank
elecs
Ja, es geht.
EEPGD ist kein Register, sondern ein Bit in Register EECON1. Beim 16F87x
und vielen anderen PICs steuert dieses Bit, ob im EEPROM bzw. im Flash
gelesen oder geschrieben wird.
Der PIC12F675 kann nur im EEPROM lesen/schreiben, wodurch dieses Bit
überflüssig ist. Wahrscheinlich kann man es trotzdem ansteuern wie beim
'F87x, es bleibt aber wirkungslos.
Hast Du es denn mal ausprobiert? Funktioniert es?
Hi,
danke für deine Antwort und deine Berichtigung.
Ja ich habe es ausprobiert aber es ging nicht hatte ne Fehlermeldung:
"Symbol not previously defined (EEPGD)"
also hab ich es einfach ausgelassen, das Programm wird dann erstellt
aber aber es funktioniert nicht. Vieleicht adressiere ich einfach nicht
nicht richtig :( oder mein Programm ist einfach falsch.
Das ist halt alles Neuland für mich.
Was genau geht nicht?
Geht wenigstens das Lesen? Du kannst ja mal mit dem Programmer einen
bestimmten Wert in eine EEPROM-Zelle schreiben und dann in Deinem
Programm auszulesen versuchen.
Ist Dir dieses Detail aufgefallen:
1
MOVLW 1 ;
2
MOVWF EEDATA ; eine 4 wollen wir schreiben
Eine eins oder eine vier?
Deine Schreib-Routine sieht prinzipiell richtig aus (siehe auch
Datenbuch PIC12F675 Kapitel "8.4 WRITING TO THE EEPROM DATA MEMORY".
Ups und schon wieder erwischt, das soll eine 1 sein.
Der Hintergrund:
der PIC wird in Betrieb genommen. Der taster wird paar mal betätigt und
zB wenn jetzt die LEDs leuchten soll er den Wert 0 reinschreiben. Wenn
ich jetzt den PIC vom Strom nehme und dann wieder anschließe, sollte der
alte zustand laden, wenn wert 0 sollen die LEDs leuchten. Das macht er
aber nicht, also er läd den Zustand nicht.
Das ding ist wie kann ich überhaupt überprüffen ob der wert geschrieben
oder gelesen wird.
Ich danke dir für deine Mühen.
Alexander Dorn wrote:
> Das ding ist wie kann ich überhaupt überprüffen ob der wert geschrieben> oder gelesen wird.
Mit dem PICkit1 und MPLAB:
View -> EEPROM
Hi,
danke danke Dir. Der EEPROM wird beschrieben, ich konnte ihn auslesen
"View -> EEPROM".
Hmm dann muss das Problemm beim starten des Programms und auswerten des
EEPROMS liegen.
Dann muss ich mal weiter gucken.
Wann du noch was entdeckt hast kannst dich gerne melden :) ich guck ob
ich den Fehler finden kann.
Gruß elecs
Die 8 Bits der EEPROM Zelle landen alle in den entsprechenden 8 Bits des
W-Registers.
Ich denke aber, der Fehler liegt bei:
btfsc W,0
"Bit Test f, Skip if Clear"
Man kann mit diesem Befehl nur File-Register testen, nicht das
W-Register.
SUBLW 1 ; l = Ziffer eins
"Subtract W from literal"
setzt das Z-Flag, wenn W=1 ist.
Dann kannst Du
btfsc STATUS, Z
verwenden (oder ist es btfss ? -> ausprobieren)
2 Tips noch zum EEPROM schreiben:
1. Zum EEPROM schreiben braucht der PIC so ca. 5-6 ms. In der
Zwischenzeit sollte man nicht versuchen anderweitig auf das EEPROM
zuzugrerifen.
Wenn du in deiner Anwendung die Zeit hast, dann empfielt es sich nach
dem Starten des Schreibens
BSF EECON1, WR ; starte den Schreibzyklus
noch die folgende Warteschleife einzufügen:
BTFSC EECON1,WR ;Warten bis EEPROM fertig geschrieben
goto $-1
2. Ich hatte schon mal das Problem, dass das Speichern ins EEPROM direkt
nach dem Einschalten nicht funktionierte. Vermutlich reicht direkt nach
dem Einschalten die Spannung zwar schon aus, damit der PIC zu laufen
anfängt, aber noch nicht um auch sicher ins EEPROM zu schreiben. Da kann
eine Warteschleife am Programmanfang weiterhelfen die Zeit zu
überbrücken bis z.B. alle Kondensatoren/Elkos geladen sind. (Die Brown
Out Detect Spannung Vbod liegt mit 2,1 V übrigens je nach Takt-Frequenz
teilweise unter der minimalen spezifizierten Betriebsspannung Vmin).
@Severino
Also ich muss sagen: Feeeeeeeeeeeeeeeeeeeeeeet es funzt!!! Danke Danke
Danke
Da war der Haken "btfsc W,0" jetzt weis ich es besser Danke.
@Otto L. Danke für den Tip ich wer es ma ausprobieren.
elecs
Alexander Dorn wrote:
> @Severino>> Also ich muss sagen: Feeeeeeeeeeeeeeeeeeeeeeet es funzt!!! Danke Danke> Danke
Gern geschehen! Viel Spass.
> @Otto L. Danke für den Tip ich wer es ma ausprobieren.>
Otto L. hat recht, man darf nicht zu schnell hintereinander schreiben.
Noch ein Tipp (hat hier vielleicht keinen Einfluss, aber man weiss ja
nie...):
Es gibt eine Application Note von Microchip (AN576), welche auf mögliche
Probleme und Lösungen im Zusammenhang mit dem Befehl "BCF INTCON,GIE"
hinweist.