Archiv verlassen und diese Seite im Standarddesign anzeigen : Inputten am ATMega 128L macht Probleme
Hallo,
ich habe ein (dringendes ;) ) Problem: Ich habe einen ATMega 128L. Genaugenommen ist der auf einer Platine, die ich einzeln gekauft habe und die eigentlich für den "Robonova" gedacht ist. Aber es gibt folgendes Problem: Die Ausgänge gehen, also ich kann an jedem Port eine LED zum leuchten bringen. Auch Servos gehen erfolgreich an jedem Port. Nur mit dem Sensoren hackt es. Und zwar gewaltig. Ich schließe einen ganz normalen Drucktaster an, der 5 Volt an einen der AD-Ports (Mit den Normalen Ports habe ich es auch schon erfolglos probiert) durchschaltet. Wenn ich dann mit einem einfachen Programm (siehe nachfolgend) den Taster abfragen will, tut sich nichts. Ich habe schon alles ausprobiert. Ist mit allen Ports so. Hoffentlich könnt ihr mir Helfen.
MfG
Hier noch der Code:
DIM Schalter AS INTEGER
Schalter = 0
Beginn:
Schalter = AD(0)
IF Schalter = 1 THEN
OUT 5,1
ELSE
OUT 5,0
ENDIF
GOTO Beginn
Hallo Simon92,
einen Taster sollte man nicht an einen Analog-Port anschließen, wenn es nicht unbedingt sein muss.
Wenn doch (dein Beispiel), dann kann man nicht einfach auf "If Schalter = 1" testen, weil je nach uC hier an einem Analogeingang Werte von 0 bis 255 oder 1023 o.ä. gemessen werden. Wenn also ein Taster nach +5V schaltet, wird ein Wert nahe am Maximum (255 oder 1023) anliegen, wenn man den Taster drückt. Drückt man nicht, hängt der Eingang "in der Luft" und liefert irgendwelche Werte. Um das zu vermeiden, braucht man einen "Pulldown-Widerstand von z.B. 10 kOhm nach GND am Eingangspin.
Das mit dem Widerstand gilt auch für digitale Eingänge. Die Abfrage geschieht aber tatsächlich mit 0/1 für nicht gedrückt/gedrückt.
Gruß Dirk
Hallo Simon,
noch als Ergänzung zu Dirks Antwort:
Du scheinst von einem anderen Basic Dialekt zu kommen. Du verwendest einige Befehle, die Bascom so nicht versteht:
Den AD-Wandler musst du mit der Funktion GetADC(x) ansprechen, wobei x abhängig von deinem µC von 0-7 (bei neueren Typen glaube ch sogar bis 15) gehen kann. Vorher musst du den AD Wandler mit Config ADC noch konfigurieren oder zumindest mit Start ADC starten.
Einen Eingangspn fragt man z.B. mit
If PINX.Y = 1 Then ...
ab, wobei X der Port (A-L) und Y der Pin des Ports (0-7) ist. Inwieweit die vorhanden sind, hängt wieder von deiner Hardware ab.
Einen Ausgangspin setzt man z.B. mit
PORTX.Y = 1
X und Y wieder wie oben.
Fast jeder Pin kann als Eingang oder als Ausgang benutzt werden. Dies kann man mit
Config PORTX = Output oder Config PINX.Y = Output (bzw. = Input) festlegen. Alternativ kannst du das DatenRichtungsRegister setzen, z.B. mit
DDRX.Y = 1 als Ausgang oder
DDRX.Y = 0 als Eingang.
So, genug der Einführung. Den Rest solltest du in der Hilfe unter Language Fundamentals nachlesen.
Gruß
Rolf
@ Dirk
Wie meinst du das mit dem Widerstand? Also ich habe es jetzt so, das, wenn der Schalter geschlossen wird, einfach 5 Volt an den Port gegeben werden. Dann stimmt das so nicht?
@ for_ro
Nein, das geht so leider nicht. Ich nehme nämlich ein Programm, das "roboBASIC" heisst. Ich würde gerne BASCOM nehmen, aber irgendwie krieg ich da keine Verbindung zustande. Die Befehle, die du mir gegeben hast, gehen alle unter roboBASIC nicht.
Hallo Dirk,
habe es ausprobiert mit den Pull-down-Widerständen. Jetzt funktioniert es einwand frei. Dankeschön
@ for_ro
Nein, das geht so leider nicht. Ich nehme nämlich ein Programm, das "roboBASIC" heisst. Ich würde gerne BASCOM nehmen, aber irgendwie krieg ich da keine Verbindung zustande. Die Befehle, die du mir gegeben hast, gehen alle unter roboBASIC nicht.
Sorry, ich hatte gedacht, du hättest im Bascom Forum gepostet.
Bauteiltöter
31.01.2009, 16:29
wenn du gerne BASCOM nutzen möchtest, dann geht das auch :)
Was benutz du für ein Proggramiergerät?
Was kommt für eine Fehlermeldung?
Was hast du unter Einstellungen-->Proggrammer eingestellt?
MfG
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.