Archiv verlassen und diese Seite im Standarddesign anzeigen : Erstes Programm mit Bascom-AVR
Bongo1st
08.09.2009, 21:26
Hallo
Meine ersten Schritte in Bascom sind eher Fehltritte.
Hoffe jemand kann mir sagen wo das der Fehler liegt.
Wen ich den Taster drücke soll eine LED Leuchten. Doch leider leuchtet die LED immer.
$regfile = "m8def.dat"
$crystal = 3686400
Config Portd.2 = Input 'D.2 ist Eingang
Portd.2 = 1 'D.2 Inter Pull an
Config Portb.5 = Output 'B.5 ist Ausgang
Led Alias Portb.5 'B.5 heisst LED
Do 'Start Hauptprogramm
If Portd.2 = 1 Then
Led = 1
Else
Led = 0
End If
Loop
End
Danke Für die Hilfe
port und pin problem du kannst nicht aus einem port lesen nur von pin also dort wo die eingabe machst schreibst du pin.
edit
also statt Config Portd.2 = Input
Config Pind.2 = Input
Bongo1st
08.09.2009, 21:50
Merci fürd schelli Hilf
Aber Leider funktioniert es immer noch nicht. Habe es Versucht mit PORT auf PIN umzuschreiben.
Kenntest du mir rasch die Zeile ändern di Relevant ist?
$regfile = "m8def.dat"
$crystal = 3686400
Config Pind.2 = Input 'D.2 ist Eingang
Pind.2 = 1 'D.2 Inter Pull an
Config Portb.5 = Output 'B.5 ist Ausgang
Led Alias Portb.5 'B.5 heisst LED
Do 'Start Hauptprogramm
If Pind.2 = 1 Then
Portb.5 = 1
Else
Portb.5 = 0
End If
Loop
End
So funktioniert es leider nicht
$regfile = "m8def.dat"
$crystal = 3686400
Config Pind.2 = Input 'D.2 ist Eingang
Pind.2 = 1 'D.2 Inter Pull an
Config Portb.5 = Output 'B.5 ist Ausgang
Led Alias Portb.5 'B.5 heisst LED
Do 'Start Hauptprogramm
If Pind.2 = 0 Then
Led = 1
Else
Led = 0
End If
Loop
End jetzt müsste es gehen
Bongo1st
08.09.2009, 21:56
leider nein [-(
hast du mal die eletronische seite getestet?
Do
Portb.5=1
waitms 500
Portb.5=0
waitms 500
Loop
dann müsst die led blinken
Bongo1st
08.09.2009, 22:02
LED Blinkt im Halbsekunden Takt. Könnte es sein, dass der Taster nicht in Ordnung ist?
kann sein schaltest du nach gnd ? oder vcc ? du musst nach gnd schalten. wenn du den schalterverdächtigst mit kabel testen bzw kontrolieren ob der taster am richtigen pin ist
Bongo1st
08.09.2009, 22:10
Die LED Leuchtet Andauernd. Wenn ich jedoch nun auf den Taster drücke Leuchtet sie minim heller (fast nicht erkennbar).
So wie ich das Layout entziffere ist der Schalter mit GND verbunden.
EDIT:
Ist an der Schaltung etwas nicht IO?
Sauerbruch
08.09.2009, 23:26
'nabend Bongo,
Die Sache mit PORT und PIN sind nur am Anfang etwas verwirrend. Wenn so ein Mikrocontroller "aufwacht", sind erstmal alle (!) I/O-Pins als Eingänge konfiguriert. Einfach deshalb, weil ein als Eingang geschalteter, d.h. hochohmiger Pin an umliegenden Bauteilen keinen Schaden anrichten kann. Eine spezielle Konfiguration als Eingang brauchst Du also schonmal nicht.
Um einen Pin zu konfigurieren, kann man natürlich den befehl "Config" verwenden. Die Bascom-Hilfe (genial gut!!!) schreibt hierzu folgendes:
Syntax
CONFIG PORTx = state
CONFIG PINx.y = state
You can also set a single port pin with the CONFIG PIN = state, statement.
Heißt also im Klartext, dass Du Config PINX.Y nehmen musst, um einen einzelnen Anschluss zu definieren. Mit Config PORTX erreichst Du alle Anschlüsse des Ports (z.B. B.0 bis B.7).
Weil ich das etwas verwirrend finde, verwende ich persönlich die "DDR"-Register (Data Direction Register). Mit dem simplen Befehl DDRB.5 = 1 wird B.5 zum Ausgang gemacht, DDRD = &B00100000 macht das gleiche.
Wenn der Port als Ausgang geschaltet ist, ist eigentlich nur das PORT-Register wichtig. Nach dem Schema PORTB.5 = 1 oder PORTB.5 = 0.
Ist der Pin ein Eingang, sind 2 Register wichtig: Das PIN-Register gibt die Information wieder, die an dem Anschluss anliegt. Eingänge also immer mit PINX.Y abfragen (!!). Wird am Anfang oft falsch gemacht!!
Mit dem PORT-Register schaltest Du den PullUp-Widerstand ein, wenn der Anschluss als Eingang konfiguriert ist. Also auch wichtig!!
Also für Deine Anwendung ganz konkret:
PORTD.2 = 1 'PullUp für D.2, Eingang ist er schon
DDRB.5 = 1 'B.5 als Ausgang
Do
If PIND.2 = 1 then
PORTB.5 = 1
else
PORTB.5=0
Loop
End
Etwas klarer jetzt?
Bongo1st
09.09.2009, 21:33
Super, es funktioniert,…..
Ist es normal, dass die Reaktion ungefähr eine halbe Sekunde dauert, bis die LED reagiert?
Ist c einfacher zu lernen?
GR Bongo
nein ist es nicht sollte schneller gehen du hast du einen Quarz drann? wenn ja musst du das dem µC sagen bei den fusebits ansonsten wird der interne genommen der glaube auf 1Mhz läuft. zu c werd ich bald was sagen können weil ich umsteigen werd (fest vorgenommen) sobald ich den arduino habe
Bongo1st
09.09.2009, 21:51
Habe einen externen Quarz. Ich denke dieser ist aktiviert. Es hat eine Schaltfläche mit: externen Quarz aktivieren. Habe darauf geklickt und eine Meldung erschien: Schreibe Fusebits….. OK
Dies muss ich ja nur einmal einstellen.
Habe es auch mit Bascom AVR versucht, jedoch hat er die Einstellungen nicht übernommen.
zum thema c sieht das interessant aus http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.