STK500 LED-Ansteuerung negiert

Gast #594680
Lesenswert?

Hallo,
ich habe seit ein paar Tagen ein STK500 und bin beim Programmieren auf 
ein Problem gestoßen, denn schon die kleinen Programme aus dem Tutorium 
funktionieren nicht so, wie sie sollten:
1
DDRB = 0xff;    
2
PORTB = 0x03;

Da sollten ja nun die ersten beiden LED's auf dem Board leuchten, aber 
im Moment leuchten gerade die ersten beiden nicht und dafür aber alle 
anderen.
Das merkwürdige dabei ist, dass die Spannung an Pin1 und Pin2 des 
ATMega16 wirklich auf high ist, so wie sie es sein sollte. Die 
Spannungen der restlichen Pins sind auf low.

Da die LED's über Transitoren an den Pins hängen, könnte es doch 
höchstens sein, dass sie nicht richtig bestückt sind? Oder habe ich eine 
Einstellung übersehen?

Vielen Dank für hilfreiche Antworten im Voraus!

Thomas.

#594686
Lesenswert?

Thomas wrote:
> Hallo,
> ich habe seit ein paar Tagen ein STK500 und bin beim Programmieren auf
> ein Problem gestoßen, denn schon die kleinen Programme aus dem Tutorium
> funktionieren nicht so, wie sie sollten:
>
>
1
> DDRB = 0xff;
2
> PORTB = 0x03;
3
>
>
> Da sollten ja nun die ersten beiden LED's auf dem Board leuchten, aber
> im Moment leuchten gerade die ersten beiden nicht und dafür aber alle
> anderen.
> Das merkwürdige dabei ist, dass die Spannung an Pin1 und Pin2 des
> ATMega16 wirklich auf high ist, so wie sie es sein sollte. Die
> Spannungen der restlichen Pins sind auf low.

Das ist korrekt.

>
> Da die LED's über Transitoren an den Pins hängen, könnte es doch
> höchstens sein, dass sie nicht richtig bestückt sind? Oder habe ich eine
> Einstellung übersehen?

Nein, die LEDs sind (aus gutem Grund) Low-aktiv. Das hättest Du aber 
auch selbst feststellen können, dann das Schaltbild der LEDs und ihrer 
Transistoren ist unübersehbar im mitgelieferten Handbuch abgebildet.


>
> Vielen Dank für hilfreiche Antworten im Voraus!

Nix zu danken...

>
> Thomas.

...
Gast #594707
Lesenswert?

Low-active hat zwei Gründe:
1. kommt noch aus vergangenen Zeiten (74er Logik), da war 'high' ein 
unbeschalteter Eingang.
1a. Die Logik (und Prozessoren) arbeiteten mit 
'open-Collector'-Schaltungen, zogen somit die 'high'-Eingänge auf Masse.
2. Low-active ist Störunanfälliger, da ein Peak (High-Impuls) von außen 
die Schaltung eher stören kann als das Signal auf Masse gezogen wird.
Gast #594711
Lesenswert?

Ich hab Dir mal ne STK500_PinDef.h gebastelt.
Binde die in Dein Projekt ein und dann kannst Du wieder "richtig" herum 
schalten.


//Taster an Port A

#define PortA_Output DDRA = 0xff;
#define PortA_Input DDRA = 0x00;

/*---------------------------------------*/

#define key0_pushed (~PINA & (1<<PA0))
#define key1_pushed (~PINA & (1<<PA1))
#define key2_pushed (~PINA & (1<<PA2))
#define key3_pushed (~PINA & (1<<PA3))
#define key4_pushed (~PINA & (1<<PA4))
#define key5_pushed (~PINA & (1<<PA5))
#define key6_pushed (~PINA & (1<<PA6))
#define key7_pushed (~PINA & (1<<PA7))


//LEDs an Port C

#define PortC_Output DDRC = 0xff;
#define PortC_Input DDRC = 0x00;

#define PortC_Pullup_on PORTC = 0xff;

/*---------------------------------------*/

#define LED0_on PORTC &= ~(1 << PC0);
#define LED0_off PORTC |= (1 << PC0);

#define LED1_on PORTC &= ~(1 << PC1);
#define LED1_off PORTC |= (1 << PC1);

#define LED2_on PORTC &= ~(1 << PC2);
#define LED2_off PORTC |= (1 << PC2);

#define LED3_on PORTC &= ~(1 << PC3);
#define LED3_off PORTC |= (1 << PC3);

#define LED4_on PORTC &= ~(1 << PC4);
#define LED4_off PORTC |= (1 << PC4);

#define LED5_on PORTC &= ~(1 << PC5);
#define LED5_off PORTC |= (1 << PC5);

#define LED6_on PORTC &= ~(1 << PC6);
#define LED6_off PORTC |= (1 << PC6);

#define LED7_on PORTC &= ~(1 << PC7);
#define LED7_off PORTC |= (1 << PC7);
#594719
Lesenswert?

Thomas wrote:
> Kann mir vielleicht noch jemand kurz erklären, was der "gute Grund"
> dafür ist, das sie low active sind?

Neben den bisher genannten "guten Gründen" kommt speziell beim STK500 
noch dazu, dass das STK500 auch Target-Spannungen unterstützt, bei denen 
es etwas eng für die LEDs wird, sie also zu dunkel werden würden. Um 
dies zu vermeiden, werden die LEDs über Transistoren in Basis-Schaltung 
angesteuert, wodurch sie auch dann mit voller Betriebsspannung (5V) 
betrieben werden, wenn der Target-AVR mit kleinerer Betriebsspannung 
läuft. Etwas tricky, aber sehr wirkungsvoll.

...
#594754
Lesenswert?

Michael U. wrote:
> Hallo,
>
> @Hannes Lux:
> mein Problem ist ja eher, daß ich die Arbeitsplatzbeleuchtung nicht mehr
> erkennen kann, wenn das STK500 leuchtet... ;)

Dann kleb' doch 'n Papierstreifen drüber. 8-P
Oder milchige Folie oder so.

>
> Gruß aus berlin
> Michael

Achja, Berlin wird vorne mit "B" geschrieben und hinten mit "h"...

Duck&wech...

Gruß von der Elbe,
...

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