Forum: Mikrocontroller und Digitale Elektronik PIC12F675 EEPROM


von Alexander D. (elecs)


Angehängte Dateien:

Lesenswert?

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

von Severino R. (severino)


Lesenswert?

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?

von Alexander D. (elecs)


Lesenswert?

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.

von Severino R. (severino)


Lesenswert?

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".

von Alexander D. (elecs)


Lesenswert?

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.

von Severino R. (severino)


Lesenswert?

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

von Alexander D. (elecs)


Lesenswert?

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

von Severino R. (severino)


Lesenswert?

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
...

von Alexander D. (elecs)


Lesenswert?

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?

von Severino R. (severino)


Lesenswert?

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)

von Otto L. (Gast)


Lesenswert?

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).

von Alexander D. (elecs)


Lesenswert?

@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

von Severino R. (severino)


Lesenswert?

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.

von Alexander D. (elecs)


Lesenswert?

Ok werde ich mir mal angucken.


Gruß elecs

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.