EEPROM auslesen

Gast #4113005
Lesenswert?
• ▲
▼
Hallo Leute :)

Ich bin noch ein kompletter Neuling in Sachen AVR und C. Ich hab sehr 
viel Erafhrung im Bereich Java, jedoch unterscheidet sich C sehr stark 
von Java und somit habe ich auch noch ein paar Anfänger Probleme. In 
meinem folgenden Code Ausschnitt, wollte ich für jedes mal wenn der 
Mikrocontroller gestartet, das eine LED so oft blinkt wie der 
Mikrocontroller in Vergangheit gestartet wurde. Dies mache ich einfach 
nur, um mal ein bisschen mit dem Zugriff auf die EEPROM klar zu kommen 
und um ein bisschen zu experimentieren.
1
/*
2
 * EEPROM_TEST.c
3
 *
4
 * Created: 01.05.2015 16:11:33
5
 *  Author: Christian
6
 */ 
7

8

9
#include <stdio.h>
10
#include <avr/io.h>
11
#include <avr/eeprom.h>
12
#include <avr/delay.h>
13

14
#ifndef F_CPU
15
#define F_CPU 1200000 //Takt von 1,2MHz
16
#endif
17

18
/************************************************************************/
19
/* Definition der einzelnen Anschlüsse des PortB                        */
20
/************************************************************************/
21
#define TEST_LED_OUTPUT 3  //Ausgang1 LED, an Anschluss PB3 angeschlossen
22
#define CHECK_LED_OUTPUT 4 //Ausgang2 LED welche bei jedem Start des Mikrocontrolles die Anzahl aller Starts durch leuchten
23
               //angibt, an Anschluss PB4 angeschlossen
24
#define INPUT1 0  //Eingang1 ist verbunden mit DIL-Schalter Position 1 verbunden, an Anschluss PB0 angeschlossen
25
#define INPUT2 1  //Eingang2 ist verbunden mit DIL-Schalter Position 2 verbunden, an Anschluss PB1 angeschlossen
26
#define INPUT3 2  //Eingang3 ist verbunden mit DIL-Schalter Position 3 verbunden, an Anschluss PB2 angeschlossen
27

28
uint8_t total_starts EEMEM; //Anzahl aller Starts, welche im EEPROM abgespeichert sind
29

30

31
/***********************************************************************************************/
32
/* Diese Methode lässt die Kontroll LED so oft blinke, wie der Mikrocontroller gestratet wurde */
33
/***********************************************************************************************/
34
void init_check_led(){
35
  uint8_t start_bytes = eeprom_read_byte(&total_starts); //Lesen der Starts aus dem EEPROM in start_bytes
36
  if(start_bytes != 0){ //Wenn Mikrocontroller schonmal gestartet wurde,...
37
    for(int index = 0; index <= start_bytes;index++){
38
      PORTB |= (1<<CHECK_LED_OUTPUT); //Kontroll LED an
39
      _delay_ms(1000); //Warte 1s
40
      PORTB &= ~(1<<CHECK_LED_OUTPUT); //Kontroll LED aus
41
      _delay_ms(100);
42
    }  
43
  }  
44
}
45

46
int main(void)
47
{
48
  DDRB = (1<<TEST_LED_OUTPUT) + (1<<CHECK_LED_OUTPUT); //Setzen der Ausgänge
49
  PORTB = (1<<INPUT1) + (1<<INPUT2) + (1<<INPUT3); //Pull-ip Widerstände der Eingänge aktivieren
50
  init_check_led();
51
  eeprom_write_byte(&total_starts, eeprom_read_byte(&total_starts)+1);
52
  while(1)
53
    {
54
        //TODO:: Please write your application code 
55
    }
Denkt ihr das ist so ok?

--

Quelltext bitte in die entsprechenden Tags einschließen.
-rufus

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.