Tasten abfragen mit ATMEGA32 und WinAvr

Hallo zusammen,

ich habe da eine kleine Testschaltung mit einem ATMEGA32, einem LCD und drei Tastern. Aus irgend einem Grund kriege ich die Taster nicht eingelesen, wenn ich den Tasterstatus auf dem LCD ausgebe kriege ich immer 0 (low) raus.

Mit dem Multimeter gemessen liegt an den entsprechenden Pins 0 V an wenn der Taster nicht gedrückt ist, und 4.93 V wenn der Taster gedrückt ist - ich vermute also die Beschaltung ist so ok.

Layout:

PB0---+--[4k2]---| | \---o/o----+5V

PB1---+--[4k2]---| | \---o/o----+5V

PB2---+--[4k2]---| | \---o/o----+5V

Der Code in WINAvr dazu ist:

---------------- #define F_CPU 10000000

#include #include "lcd-routines.h" #include

int main(void) { unsigned char cnt,blnk,bval;

lcd_init();

lcd_data('T'); lcd_data('e'); lcd_data('s'); lcd_data('t');

DDRA = 0xFF; // Port A Ausgänge DDRB = 0x00; // Port B Eingänge PORTB = 0x00; // Interne Pullups deaktivieren

blnk = 0xFF;

while(1) { bval = PORTB; PORTA = blnk; for (cnt=0;cnt

Reply to
Andreas Koch
Loading thread data ...

Andreas Koch schrieb:

Ja: "PORTB" ist f=FCr die Ausgabe, "PINB" f=FCr die Eingabe. Es muss also if ((bval =3D=3D PINB) /* &&(bval!=3D0) */ ) lauten.

Gru=DF Thorsten

Reply to
Thorsten Wahn

Thorsten Wahn schrieb:

Bl=F6dsinn, es geht nat=FCrlich um die Zeile, wo der Port eingelesen wird, also: bval =3D PINB;

(Ansonsten w=FCrde ich aber auch die Auswerteroutine mal =FCberdenken)

Gru=DF Thorsten

Reply to
Thorsten Wahn

Danke, ich habe natürlich beide Stellen umgeändert, und schon klappt es...

Das war ein erster Versuch, die Blink-Debug-Schaltung um einen entprellten Taster zu ergänzen. Für die eigentliche Anwendung stöbere ich am besten nach etwas geeigneterem im Netz...

Andreas

Reply to
Andreas Koch

Ich würde die Taster nicht nach V+ sondern nach GND schalten. Wenn du dann die internen Pull-ups aktivierst, entfallen auch die Widerstände.

Gruß

Stefan DF9BI

Reply to
Stefan Brröring

Stefan Brröring schrieb:

Hallo,

genau, Pulldown Widerstände sollte man vermeiden wenn es irgendwie geht. Ein Pullup Widerstand funktioniert besser, stabiler und verbraucht weniger Strom.

Bye

Reply to
Uwe Hercksen

Am Mon, 17 Sep 2007 14:12:31 +0200 schrieb Stefan Brröring:

Hallo!

Ich würd allerdings - grad bei einer Bastelschaltung - noch einen Widerstand ( 1k oder so) vor dem Taster spendieren damit der Taster nicht direkt am Pin hängt.

Wenn man sonst mal ausversehen den Pin als Ausgang hat und eine Taste drückt ist der Atmel gehimmelt. BTDT no Shirt ;-)

lg, Thorsten

Reply to
Thorsten Oesterlein

Hallo Uwe,

den Satz hab ich nicht verstanden. Warum sollte ein Widerstand, mit dem ich eine offene (CMOS!) Eingangsleitung nach GND ziehe mehr Strom ziehen, als wenn ich den gleichen nach VCC ziehe?

Marte

Reply to
Marte Schwarz

Marte Schwarz schrieb:

Uwe ist gedanklich vielleicht noch in TTL-Zeiten. :-)

Gruß Henning

--
henning paul home:  http://home.arcor.de/henning.paul
PM: henningpaul@gmx.de , ICQ: 111044613
Reply to
Henning Paul

Henning Paul schrieb:

Beim 8031 z.B. gibt es kein DDR. Da schreibt man einfach ein FF auf den Port und verwendet den als Eingang, indem man den Portzustand einfach abfragt. Da der 8031 mehr Strom nach GND als nach + treiben kann, kann man einen IO-Pin einfacher nach GND als nach VCC ziehen. Das gilt dann auch für die CMOS-Versionen. Beim AVR hat man diesen Effekt wegen des DDR nicht. Aber da spart man dann durch die internen Pull-Ups die externen Widerstände, wenn man nach GND schaltet.

Gruß

Stefan DF9BI

Reply to
Stefan Brörring

Wenn der Taster vom Pin nach GND geht, passiert aber nichts

Gruß

Stefan DF9BI

Reply to
Stefan Brörring

Hallo Stefan,

Solange man nicht zu lange draufdrueckt. Beim MSP430 zum Beispiel koennen dabei durchaus gut 100mA ueber eine Struktuerbreite im Mikrometerbereich fliessen. Zisch ... Kokel ... Peng.

--
Gruesse, Joerg

http://www.analogconsultants.com
Reply to
Joerg

Hallo Henning,

Das war aber jetzt fies ;-)

Soll das andeuten, dass Leute wie Uwe und ich inzwischen nach deutschem Industrieverstaendnis als vergreist gelten?

--
Gruesse, Joerg

http://www.analogconsultants.com
Reply to
Joerg

Joerg :

Ach Quark. Ich schliess den hier immer mal kurz, passiert is noch nix. :-). Vielleicht liegt es auch daran, das der 3v3 Regler nicht mehr als

100mA schafft. Vorgestern im Tran sogar mal die Betriebsspannung falschrum angeklemmt. Wusste schon warum ich der defaultmässig immer ne Diode im Design hab :-).

M.

Reply to
Matthias Weingart

Hm, ich dachte immer, der Transistor vom Pin nach GND kann deutlich mehr Strom treiben, wie der von VCC zum Pin, und dass da eine Strombegrenzung drin ist, indem der FET in die Sättigung gefahren wird. Deshalb schaltet man ja auch eine LED üblicherweise über einen Widerstand von VCC zum IO-Pin und nicht vom IO-Pin nach GND.

Da muss ich doch mal im Datenblatt zu nem modernen Prozessor nachsehen.

Beim ATmega16 hab ich da jetzt folgendes gefunden:

The simplest method to ensure a defined level of an unused pin, is to enable the internal pull-up. In this case, the pull-up will be disabled during reset. If low power consumption during reset is important, it is recommended to use an external pull-up or pull-down. Connecting unused pins directly to VCC or GND is not recommended, since this may cause excessive currents if the pin is accidentally configured as an output.

Ist die Frage, was excessive Currents bedeutet...

Dann steht da noch:

DC Current per I/O Pin ...............................................

40.0 mA

Hab aber nichts gefunden, was darauf hindeutet, dass der obere FET weniger Strom treibt, wie der untere. Scheint tatsächlich etwas anders zu sein, als beim 8031.

Gruß

Stefan DF9BI

Reply to
Stefan Brröring

Stefan Brröring schrieb:

Oder z.B. im Datenblatt eines beliebigen HC-TTL-Logikgatters.

In der Tat.

Gruß Henning

--
henning paul home:  http://home.arcor.de/henning.paul
PM: henningpaul@gmx.de , ICQ: 111044613
Reply to
Henning Paul

Am Mon, 17 Sep 2007 22:08:15 +0200 schrieb Stefan Brörring:

Hallo Stefan!

Das hat mein Atmel aber anderes gesehen. Pin auf Ausgang. Ausgang auf High. Taster gegen Masse und der Pin war nicht mehr zu gebrauchen. Leider war das auch einer der Pins zum Programmieren des Atmel. :-( Somit hab ich ihn gleich ganz unbrauchbar gemacht.

Liebe Grüße, Thorsten

Reply to
Thorsten Oesterlein

Hallo Matthias,

Ich hatte mal einen Regler davor, der bis ueber ein Ampere nachschob. Gab einen Krater :-(

--
Gruesse, Joerg

http://www.analogconsultants.com
Reply to
Joerg

Hallo Stefan,

Irgendwo im Datenblatt oder Family Spec Deines uC muessten Kurven fuer V_ol versus sink current und V_oh versus source current sitzen. Dann mit dem Taschenrechnerli eben die beiden Rdson ausgerechnet und Du hast diese Info. Am besten irgendwo reinkritzeln, damit man nicht nochmal suchen muss.

--
Gruesse, Joerg

http://www.analogconsultants.com
Reply to
Joerg

Joerg schrieb:

Jetzt endlich is raus, wie der "grand canyon" entstanden ist. :D

Hint: Der Simpsons-Film.

Guido

Reply to
Guido Grohmann

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.