Hallo ..
ich hab folgenden C-Code (AVRStudio 4 + WinAVR):
1 | #include <inttypes.h>
|
2 | #include <avr/io.h>
|
3 | #include <avr/interrupt.h>
|
4 | #include <avr/eeprom.h>
|
5 | #include <inttypes.h>
|
6 |
|
7 | uint8_t eeFooByte EEMEM = 123;
|
8 | uint8_t eeFooByte2 EEMEM = 0xAA;
|
9 |
|
10 | int main()
|
11 | {
|
12 | unsigned char einbyte = 0x01;
|
13 | uint8_t myByte;
|
14 |
|
15 | myByte = 0xAA;
|
16 | eeprom_write_byte(&eeFooByte2, myByte);
|
17 | eeprom_write_byte(&eeFooByte2+2, myByte);
|
18 | eeprom_write_byte(&eeFooByte2+3, myByte);
|
19 |
|
20 | // Config
|
21 | DDRB = 0x02;
|
22 | PORTB = 0x00;
|
23 |
|
24 | while(1)
|
25 | {
|
26 | if((PINB&0x08)>0) // Ist Pin auf High
|
27 | {
|
28 | myByte = 0x01;
|
29 | eeprom_write_byte(&eeFooByte, myByte);
|
30 | myByte = 0xCC;
|
31 | eeprom_write_byte(&eeFooByte2, myByte);
|
32 | }
|
33 |
|
34 | einbyte = eeprom_read_byte(&eeFooByte);
|
35 | if(einbyte == 0x01)
|
36 | {
|
37 | PORTB |= 0x02;
|
38 | }
|
39 | else
|
40 | {
|
41 | PORTB = 0;
|
42 | }
|
43 | }
|
Ich bin Anfänger und wollte einfach ein kleines Programm schreiben ..
Wenn der Pin PB3 vom Tiny13 auf High Pegel ist, dann soll der Tiny ein
0x01 ins EEPROM schreiben, sonst nix machen.
Außerdem soll der Tiny13 lesen ob im EEPROM eine 0x01 steht und dann
ggf. PB1 auf High machen, sonst auf Low.
An PB3 hab ich noch einen Pull-Down auf Masse dran. Leider liest der AVR
den Status nicht. Die Tests zum schreiben (0xAA) ins EEPROM klappen, das
ist immer da wenn ich lösche/programmiere/auslese. Aber die 0x01 fehlt.
Der Pin ist über ein Widerstand (100Ohm) fest auf VCC, also immer High.
Kann mir jemand weiterhelfen? Wie gesagt .. bin Anfänger auf dem Gebiet.
Dankeschön!