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 PIC PIC16F87x. 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
Wenn die Led an sein soll, durchläuft Dein Programm auch den Teil für "aus".
1 | ... |
2 | movwf GPIO ; send data to GPIO port |
3 | goto Main ; <------ Hinzufügen |
4 | aus |
5 | ... |
Hi das hab ich schon gesehen aber trotzdem danke, also ich glaube das mein Fehler hier liegt:
1 | |
2 | btfsc W,0 |
wenn der EEPROM ausgelesen wird, dann wandert doch der Wert am Ende in das W register
1 | MOVF EEDATA, W ; Die Daten der EEPROM Zelle nach W kopieren |
aber im welchem bit?
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.
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.