www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik PIC12F675 EEPROM


Autor: Alexander Dorn (elecs)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Severino R. (severino)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Alexander Dorn (elecs)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Severino R. (severino)
Datum:

Bewertung
0 lesenswert
nicht 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:
    MOVLW  1                  ; 
    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".

Autor: Alexander Dorn (elecs)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Severino R. (severino)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Alexander Dorn (elecs)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Severino R. (severino)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn die Led an sein soll, durchläuft Dein Programm auch den Teil für 
"aus".
...
    movwf  GPIO    ; send data to GPIO port
    goto   Main    ; <------ Hinzufügen
aus
...

Autor: Alexander Dorn (elecs)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi das hab ich schon gesehen aber trotzdem danke, also ich glaube das 
mein Fehler hier liegt:
    
    btfsc W,0


wenn der EEPROM ausgelesen wird, dann wandert doch der Wert am Ende in 
das W register

    MOVF   EEDATA, W           ; Die Daten der EEPROM Zelle nach W kopieren 


aber im welchem  bit?

Autor: Severino R. (severino)
Datum:

Bewertung
0 lesenswert
nicht 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)

Autor: Otto L. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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).

Autor: Alexander Dorn (elecs)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Severino R. (severino)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Alexander Dorn (elecs)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok werde ich mir mal angucken.


Gruß elecs

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.