PDA

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

Thomas$
08.09.2009, 21:36
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

Thomas$
08.09.2009, 21:52
$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 [-(

Thomas$
08.09.2009, 21:59
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?

Thomas$
08.09.2009, 22:05
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

Thomas$
09.09.2009, 21:39
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.

Thomas$
09.09.2009, 22:34
zum thema c sieht das interessant aus http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial