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