mikrocontroller.net

Forum: Compiler & IDEs Timerprobleme (Unterspannungsanzeige)


Autor: Robert S. (razer) Benutzerseite
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo an alle

Ich hab ein Programm geschrieben, das alle ~5 Sekunden einen Wert über
A2D einließt (Timergesteuert). Wenn dieser Wert unter 614 ist, wird
dieser im Eeprom abgelegt und ein Zähler um 1 erhöht. Doeser wird auch
im Eeprim abgelegt. Erst wenn der Wieder einmal über 614 war, kann der
Wert und der Zähler um eins erhöht werden. Das ganze hab ich für 2 A2D
Kanäle gemacht. Weiters hab ich eine Unterfunktion zum Auslesen der
Wert aus dem Eeprom. (FUnktionsaufruf wenn PD7 gedrückt ist).

Nur leider funktioniert es nicht wie sollte. Bei jeder MEssungen kommen
zusätzlich Zeichen aufs Display die eigentlich nicht dort hingehören.
Ich weiß aber nicht warum

Sobald ein falsches Zeichen aus der main (messfunktion) am Display ist,
werden bei der lesefunktion auch falsche Zeichen Dargestellt.

Das Abspeichern im Eeprom funktioniert auch nicht.

Als Prozessor verwende ich einen Mega8.

Ich hoffe mir kann jemand helfen. Im Anhang ist die main.

Danke im Voraus

Gruß Robert

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ein Fehler fällt mir schon mal sofort auf: Was soll die Deklaration
volatile uint16_t zelle[1]; ???
Ein Array mit einem Element? Da im Programmverlauf 2 Elemente des
Arrays angesprochen werden, ist eine Fehlfunktion hier schon mal
vorprogrammiert.

Gruß

Johnny

Autor: Robert S. (razer) Benutzerseite
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Ich hab nun vieles geändert. Und es funktioniert so einigermaßen.

edoch funktioniert der Zähler für den Eeprom noch nicht Richtig. Der
EEprom hat doch nach einem Flash den Wert 255 (0xFF). Jedoch stimmt der
Wert beim nächsten Zählerzugriff nicht und es steht ein falscher Wert.
Ab hier zählt nun der Zähler im um 1 aufwärts.

Was ist da los?? Wann wird der EEprom gelöscht?? Nur wenn ich das
explizit im AVRDUDE mach???

Weiters versteh ich noch nicht das Auslesen. Das Auslesen der WORDs
funktioniert nur mit den Adressen 4,6. Ich dacht die Adressen sind
2,4.

Warum??

Im Anhang wieder der aktuelle Code

Gruß Robert

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Wann wird der EEprom gelöscht?

It depends.  By default, bei einem chip erase.  Du musst erst
die EESAVE-Fuse programmieren, damit das nicht mehr passiert.

Außerdem hat AVR Studio wohl (zumindest bei Benutzung des JTAG ICE)
noch eine, naja, Nicht-Intuitivität, wo du neben der EESAVE-Fuse noch
irgendwo versteckt irgendeinen Haken abwählen musst, der im
Einschaltzustand ebenfalls zur Zerstörung des EEPROM führt...  Ich
weiß, warum ich AVR Studio nicht leiden kann. ;-)

Autor: Werner B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Wann wird der EEprom gelöscht?

Das jeweilige Byte automatisch bei/vor jedem beschreiben.

P.S.
Falls es keine Rolle spielt ob exakt auf adresse 0, 2 oder 4 rate ich
das ganze dem Compiler und Linker zu überlassen.

Als Beispiel
...
#include <avr/eeprom.h>

#define IP_ADDRESS      {172,16,50,212}
#define MAC_ADDRESS     {0x00,0x00,0x1b,0x35,0xa4,0xaf}

uint8_t eeMYIP[4] __attribute__ ((section(".eeprom"))) = IP_ADDRESS;
uint8_t ee_mymac[6] __attribute__ ((section(".eeprom"))) =
MAC_ADDRESS;

//IP Adresse des Web Servers
uint8_t MYIP[4];

//MAC Adresse des Web Servers
uint8_t mymac[6];

...

    // MAC Adresse aus eeprom lesen
    eeprom_read_block(&mymac[0], &ee_mymac[0], sizeof(mymac));
    // IP Adresse aus eeprom lesen
    eeprom_read_block(&MYIP[0], &eeMYIP[0], sizeof(MYIP));
...

Das Schreiben erfolgt sinngemäß mit eeprom_write_block()

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.