Forum: Mikrocontroller und Digitale Elektronik Tiny13 Anfängerfrage - Pin lesen


von tobi_weis_nix (Gast)


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!

von Karl H. (kbuchegg)


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.

von tobi_weis_nix (Gast)


Lesenswert?

Der Pull down sind 6.7k .. 100ohm hab ich auch schon raus gemacht, 
geholfen hat es leider nix ... :(

von Karl H. (kbuchegg)


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.

von tobi_weis_nix (Gast)


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?

von Gast (Gast)


Lesenswert?

Um DebugWire zu nutzten, bräuchte man schon einen JTAG mkII oder Dragon.
Gerade beim Verkaufspreis des Dragons hat sich jeder gedankte an DIY 
schon erledigt (lohnt nicht).

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.