Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem beim Atmega mit Taster abfrage
Hallo.
Ich habe ein Problem beim Programmieren in Bascom. Ich möchte eine Led einschalten wenn ich ein Taster drücke. Doch leider reagiert der Atmel nicht auf den Taster. Ich nutze einen Atmega32(16Mhz Quarz).
Kann bitte Jemand den Text überprüfen?
$regfile = "m32def.dat" 'Die Anweisung bestimmt Controllertyp, hier AVR Mega 32
$framesize = 32 'Stackanweisungen, die eigentlich nur bei größeren Programmen
$swstack = 32 'wirklich nötig werden
$hwstack = 32
$crystal = 16000000 'Die Frequenz des verwendeten Quarzes
Config Portb.1 = Output 'Ein Pin wird aus Ausgang konfiguriert PC0 (also Pin0 von Port C)
Led Alias Portb.1
Config Pinc.4 = Input 'Ein Pin (PA0) wird als Eingang definiert
Taster Alias Pinc.4
do
If Taster = 0 Then
Led=1 'Pin wird auf High, also 5V geschaltet
else
Led = 0 'Pin wird auf Low, also 0V geschaltet
endif
Waitms 100
loop
Im Anhang habe ich den Schaltplan eingefügt. Die Platine ist selbst geätzt. Es funktioniert soweit auch alles außer die Taster. Ich kann ein Display ansteuern, die Leds funktionieren und auch das Relais lässt sich ansteuern. An X1,X2,X3 werden die Taster angeschlossen.
Danke Gruß Daniel
Deinen Schaltplan kann man leider nur sehr schwer bis hin zu gar nicht lesen :(
Hast du den Pin wo der Taster angeschlossen ist mit einem Pull-up auf Vcc gezogen, sodass der Taster eine Verbindung nach GND herstellt?
Sauerbruch
06.12.2011, 23:52
Ich habe zwar noch nie mit so einem großen Controller wie dem Mega32 gearbeitet, habe aber schon öfter mal gelesen, dass das JTAG-Interface einem in die Suppe spucken kann. Das besteht beim Mega32 aus den Anschlüssen C5, C4 (!!!), C3 und C2. Im Auslieferungszustand ist dieses Interface aktiv, wodurch diese Anschlüsse zunächst nicht als "normale" Anschlüsse verwendet werden können.
Wenn Du auf Fusebit-Ebene das JTAG-Interface deaktivierst, könnte es eventuell klappen.
Oder Du versuchst, ohne die genannten 4 Anschlüsse auszukommen.
Auf alle Fälle muss (wie Kampi ja schon geschrieben hat) sichergestellt sein, dass der Anschluss auf irgendeinem "sauberen" Pegel liegt, wenn der Taster offen ist. D.h. er darf nicht einfach "in der Luft hängen", sondern muss über einen hochohmigen Widerstand auf +5V oder GND gezogen werden (je nachdem ob der Taster nach GND oder +5V geht). Am einfachsten geht das mit den eingebauten PullUp-Widerständen, die Du über das PORT-Register aktivierst, wenn ein Anschluss als Eingang konfiguriert ist.
Der Rest vom Programmcode ist o.k.!
Ich denke auch dass es nicht am Code liegt. Dieser ist i.o. Eventuell könntest du den Taster Softwaremässig noch entprellen da die LED sonst für eine kurze Zeit an und aus geht (siehst du zwar nicht und bei einer LED ist das eigentlich auch egal). Wenn du einen Zähler hättest der bei Tastendruck 1 hochzählen soll würde das prellen stören, weil er jeden High-Pegel des prellenden Tasters zählen würde (so ein Controller ist halt schneller als die Tastermechanik ;) )
Ließ dir mal das hier durch :)
http://halvar.at/elektronik/kleiner_bascom_avr_kurs/taster_entprellen/
Und deaktivier mal das JTAG Interface wie es Sauerbruch gesagt hat. Dies könnte das Problem lösen. Das aktivierte JTAG spuckt so ziemlich jedem in die Suppe also nicht drüber ärgern :)
Der Anschluss ist mit einem Widerstand gegen VCC gelegt (Pullup Widerstand). Die Taster sind an den Anschlüssen C1-C4. Ich werde nachher probieren das Interface abzuschalten. Erstmal Danke
Das Interface ist abgeschaltet und die Eingänge funktionieren. Ich möchte den Quarz mit 16Mhz einschalten. Es gibt allerdings sehr viele Einstellungen. Kann mir Jemand sagen welche ich von den auswählen muss? Achso in Bascom konnte ich das Interface nicht abschalten. Aber über das Programm vom MK2(myAVR Workpad) war es problemlos möglich. Also ich möchte über Workpad den Quarz einschalten, weiß aber nicht welche Einstellung die richtige ist. Im Anhang ist ein Bild mit den möglichen Einstellungen
20733
Wieso konntest du das im Bascom nicht abschalten?
Und Ext. Crystal/Resonator High Freq. ist richtig. Start-Up Time ist nicht so wichtig. Das stellt nur ein wie lange der Controller wartet bis sich das Quarz eingeschwungen hat. Ich hab das höchste genommen :)
Merk dir aber was du angekreuzt hast damit, falls es nicht funktionieren sollte(!), du weißt welchen Takt du in etwa anlegen musst.
Ich hab z.B. als Programmer den All AVR Programmer der hat eine eigene Taktquelle falls man den Takt falsch gesetzt hat.
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.