Tiny13 Anfängerfrage - Pin lesen

Gast #638400
Lesenswert?
• ▲
▼
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!
#638408
Lesenswert?
• ▲
▼
tobi_weis_nix wrote:

> 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.

Wie gross ist der Pull-Down?

Nimm den 100Ohm mal raus und hänge den Pin direkt an Vcc.
#638427
Lesenswert?
• ▲
▼
tobi_weis_nix wrote:
> Der Pull down sind 6.7k .. 100ohm hab ich auch schon raus gemacht,
> geholfen hat es leider nix ... :(

Am Programm kann ich so nichts auf den ersten Blick fehlerhaftes
erkennen.

Vereinfachen wir das Pgm doch mal
1
#include <avr/io.h>
2

3
int main()
4
{
5
  DDRB = 0x02;
6

7
  while( 1 ) {
8
    if( PINB & 0x08 )
9
      PORTB = 0x02;
10
    else
11
      PORTB = 0x00;
12
  }
13
}

PB1 sollte dem Zustand von PB3 folgen:
Legst du PB3 auf Vcc, sollte auch PB1 auf High gehen.
Nimmst du PB3 von Vcc weg (dann zieht der Pull-Down den Pin auf 0),
geht auch PB1 auf 0.
Gast #638442
Lesenswert?
• ▲
▼
So klappt jetzt .. keine Ahnung wo wirklich der Fehler lag.. Hab alles 
nochmal gelöscht (Chip Erase und neu programmiert).

THX!

Achso, kann man sich so ein Debug Wire Interface eigentlich auch selber 
bauen?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren