Hallo! Ich bin dabei mir ein AVR Experimentierboard mit einem ATMega8 aufzubauen. Nun habe ich folgende Frage: Wie schliesse ich die LED's und die Taster richtig an. Ich finde nähmlich egal wieviele Schaltpläne ich auch suche immer die gleiche Lösung wie im Dateinanhang. Aber das finde ich doch sehr unlogisch, denn in diesem Fall leuchtet ja die LED, wenn der Portausgang auf logisch 0 steht. Und wenn ich den Taster drücke liegt am Porteingang eine logische 0 an. Ich finde das müsste doch genau umgekehrt sein, also die LED auf GND. Und die Taster auf VCC (Widerstand auf GND). Damit bei einer logischen 1 am Portausgang auch die LED brennt und der Taster beim drücken eine logische 1 an den Porteingang liefert. Oder versthe ich da etwas falsch?? Gruss Michi
Michael Sutter schrieb: > Ich bin dabei mir ein AVR Experimentierboard mit einem ATMega8 > aufzubauen. Nun habe ich folgende Frage: Wie schliesse ich die LED's und > die Taster richtig an. Ich finde nähmlich egal wieviele Schaltpläne ich > auch suche immer die gleiche Lösung wie im Dateinanhang. Im Regelfall lässt man beim Taster den Widerstand auch noch weg. Der µC hat einen eingebaut und kann ihn bei Bedarf zuschalten. > Aber das finde ich doch sehr unlogisch, denn in diesem Fall leuchtet ja > die LED, wenn der Portausgang auf logisch 0 steht. Und wenn ich den > Taster drücke liegt am Porteingang eine logische 0 an. Macht ja nichts :-) Software ist geduldig. Der ist es egal, ob sie jetzt einen Pin auf 1 oder auf 0 setzen muss, damit die LED leuchtet :-) Der Grund dafür liegt in der Vergangenheit: Frühere Prozessoren konnten mehr Strom vertragen, wenn der Strom von aussen in den µC hineinläuft (also von extern + über den Prozessor nach GND) als umgekehrt. Und das ist dann so geblieben. Es gibt nichts was sich so hartnäckig hält, wie eine Tradition. > Und die Taster auf VCC (Widerstand auf GND). Damit bei einer logischen 1 > am Portausgang auch die LED brennt und der Taster beim drücken eine > logische 1 an den Porteingang liefert. Bei Eingabeelemente macht man das alerdings wirklich gerne umgekehrt. Ruhezustand ist High, Betätigung ist Low. Ist der Ruhezustand auf einem Draht die positive Spannung, dann merkst du sofort, wenn der Draht abgerissen ist: Die Schaltung dahinter geht dann auf Dauerfeuer über. Hast du aber Masse als Ruhezustand, dann kannt du den Draht abreissen und merkst meistens gar nichts, bis du den Taster zum ersten mal betätigst und sich nichts rührt. Lieber einen Fehler frühzeitig durch Fehlfunktion zu erkennen als dann wenn man die Funktion brauchen würde und nichts rührt sich. Dazu kommt natürlich, dass die AVR zwar PullUp Widerstände eingebaut haben aber keine PullDown
Das heisst im Klartext, dass ich am besten einfach von vorneherein umdenke und wenn ich die LED leuchten lassen will eine 0 anstelle einer 1 setzten muss. Und bei den Tastern genau so. Richtig?? Gruss Michi
>dass ich am besten einfach von vorneherein >umdenke und wenn ich die LED leuchten lassen will eine 0 anstelle einer >1 setzten muss. Nö. Musst du nicht, du kannst es auch anders herum machen. Und gerade für Experimentierboards, wo man mal schnell was probieren, und den Portzustand per LED anzeigen will, ist "1 = An" eingängiger. Das das bei älteren Prozessoren nicht geht, mag ja so sein, aber früher war eben doch nicht alles besser. Die Schaltung dazu solltest du alleine hinbekommen :-) Oliver
Also dann kann ich es doch so machen: Michael Sutter schrieb: > Ich finde das müsste doch genau umgekehrt sein, also die LED auf GND. > Und die Taster auf VCC (Widerstand auf GND). Damit bei einer logischen 1 > am Portausgang auch die LED brennt und der Taster beim drücken eine > logische 1 an den Porteingang liefert. Ich wusste eben gar nicht ob das überhaupt so geht! Oder ob es aus irgend einem Grund so sein muss wie die angehängte Schaltung. Gruss Michi
Michael Sutter schrieb: > Und die Taster auf VCC (Widerstand auf GND). Damit ... der Taster beim drücken >eine logische 1 an den Porteingang liefert. Das kann man machen, allerdings ist beim AVR da schalten gegen Masse üblich, weil der Pull-Up-Widerstände schon eingebaut hat. Pull-Down muß man extra dranbasteln. Oliver
OK dann werde ich das so machen! Finde ich nähmlich viel logischer wenn bei 1 die LED brennt und bei 0 nicht! Vielen Dank!!!! Gruss Michi
Michael Sutter schrieb: > OK dann werde ich das so machen! > Finde ich nähmlich viel logischer wenn bei 1 die LED brennt und bei 0 > nicht! Man gewöhnt sich an alles.
1 | #define SET_1( PORT, BIT ) PORT &= ~( 1 << (BIT) )
|
2 | #define SET_0( PORT, BIT ) PORT |= ( 1 << (BIT) )
|
3 | |
4 | #define LED_ON( PORT, BIT ) SET_0( PORT, BIT )
|
5 | #define LED_OFF( PORT, BIT ) SET_1( PORT, BIT )
|
6 | |
7 | #define LED_PORT PORTB
|
8 | #define LED_DDR DDRB
|
9 | #define ALARM_LED PB0
|
10 | #define READY_LEF PB1
|
11 | |
12 | |
13 | int main() |
14 | {
|
15 | LED_DDR = ( 1 << ALARM_LED ) | ( 1 << READY_LED ); |
16 | |
17 | while( 1 ) { |
18 | ....
|
19 | |
20 | |
21 | LED_ON( LED_PORT, ALARM_LED ); |
22 | |
23 | ...
|
24 | |
25 | LED_OFF( LED_PORT, ALARM_LED ); |
26 | LED_ON( LED_PORT, READY_LED ); |
27 | |
28 | }
|
.... ist letztendlich nur eine Frage, wie man sich die Software aufbaut, ob man sich mit diesen 0/1 Geschichten ständig rumschlagen muss oder ob das nur an einer Stelle zentral gesammelt ist.
Naja, die Kernfrage war ja nach der Beschaltung auf einem "AVR Experimentierboard". Die Betonung liegt da ganz klar auf Experimntieren. In einer endgültigen Anwenderschaltung kann man es machen, wie man will, aber beim Experimentieren kann es schon mal vorkommen, dass man einen Eingang, an dem ein Taster hängt, als Ausgang schaltet. Was dann? Die Taster an GND (oder Vcc) sollten schon mit einem Reihenwiderstand von ca. 150 Ohm und einem Pullup (oder Pulldown) von ca. 10 kOhm betrieben werden. Und wenn die LEDs alle über je einem Transistor mit Basis- und Kollektor-Widerstand betrieben werden, nutzt man den AVR-Ausgangs-Aussteuerbereich von 40mA nicht aus, kann die so beschalteten LED-Anzeigen aber auch parallel auf einen Eingang zur Pegelkontrolle hängen OHNE Beeinflussung des Pegels. Wie oben geschrieben - nur zum Experimentieren. Auf dem STK600 ist es jedenfalls so gemacht worden Blackbird
Hier mal ein Bild von einem ATMega8535/16/32/644-Experimentierboard. Quarz steckt in einer Fassung, alle 10pol. "Stecker" sind 2reihige Stiftleisten mit Ausnahme der beiden Wannenstecker für ISP und JTAG. Die Beschaltung der Tastern und LEDs ist stromsparend und kurzschlußfest. Blackbird
Karl heinz Buchegger schrieb: > Der Grund dafür liegt in der Vergangenheit: > Frühere Prozessoren konnten mehr Strom vertragen, wenn der Strom von > aussen in den µC hineinläuft (also von extern + über den Prozessor nach > GND) als umgekehrt. Übrigens nicht nur bei historischen Prozessoren - auch beispielsweise bei den STM32 (Cortex M3) gilt das: Datenblatt http://www.st.com/stonline/products/literature/ds/13586/stm32f101c8.pdf > Output driving current > The GPIOs (general purpose input/outputs) can sink or source up to +/-8 > mA, and sink +20 mA (with a relaxed VOL). Bei AVRs ist es aber wirklich egal. MfG, Heiko
Vielen Dank für die Tipps! Ich habe am Board nun etwas weiter gelötet, und die LED's und Taster so angeschlossen, dass bei einer 1 die LED leuchtet und beim drücken des Tasters ein 1 Impuls an den Port geliefert wird. Ich werde mich nochmals melden, sobald ich das Bord fertig aufgebaut habe. Gruss Michi
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.