Hallo zusammen, ich möchte mit dem EEMEM Makro eine Variable im EEPROM anlegen, diese beschreiben und anschließend wieder auslesen. Um zu sehen was in der Variable steht, übertrage ich die Variable mit dem Uart. Ich beschreibe die Variable test_byte mit 0x40 was nach der ASCII Tabelle das @ Zeichen ist. Leider bekomme ich dieses Zeichen aber nicht angezeigt. Was mache ich falsch?
1 | Atmel ATmega328p, Arduino Uno |
2 | |
3 | #define EEMEM __attribute__ ((section (".eeprom")))
|
4 | |
5 | #define F_CPU 16000000UL
|
6 | #define BAUDRATE 9600
|
7 | #define BAUD_PRESCALLER (((F_CPU / (BAUDRATE * 16UL))) - 1)
|
8 | |
9 | |
10 | #include <avr/eeprom.h> |
11 | #include <avr/io.h> |
12 | #include <util/delay.h> |
13 | |
14 | unsigned char test_byte EEMEM = 0x40; |
15 | |
16 | void usart_init() |
17 | {
|
18 | // Baudrate einstellen
|
19 | UBRR0H = (unsigned char)(BAUD_PRESCALLER >> 8); |
20 | UBRR0L = (unsigned char)(BAUD_PRESCALLER); |
21 | // asynchroner USART Modus
|
22 | UCSR0C &= ~((1 << UMSEL01)|(1 << UMSEL00)); |
23 | // 8-Datenbits
|
24 | UCSR0C |= (1 << UCSZ00)| (1 << UCSZ01); |
25 | // 1-Stoppbit
|
26 | UCSR0C &= ~(1 << USBS0); |
27 | // USART Sende- und Empfangseinheiten aktivieren
|
28 | UCSR0B = (1 << RXEN0)|(1 << TXEN0); |
29 | }
|
30 | |
31 | void usart_put_byte(unsigned char data) |
32 | {
|
33 | while((UCSR0A & (1 << UDRE0)) == 0); // Senderegister frei? |
34 | UDR0 = data; |
35 | }
|
36 | |
37 | void usart_put_string(char *string_ptr) |
38 | {
|
39 | while(*string_ptr != 0x00) |
40 | {
|
41 | usart_put_byte(*string_ptr); |
42 | string_ptr++; |
43 | }
|
44 | }
|
45 | |
46 | int main(void){ |
47 | |
48 | unsigned char test; |
49 | usart_init(); |
50 | while(1) |
51 | {
|
52 | test = eeprom_read_byte(&test_byte); |
53 | usart_put_string(" &test_byte ="); |
54 | usart_put_byte(test); |
55 | //usart_put_byte(0x0A);
|
56 | _delay_ms(1000); |
57 | }
|
58 | return 0; |
59 | }
|