Forum: Mikrocontroller und Digitale Elektronik EEPROM auslesen


von Chris (Gast)


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

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.