PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Lauflicht so nicht möglich?



Omeg@
24.12.2005, 22:54
Nabend,

Ich habe vorgestern mein erstes avr board aufgebaut. es ist ein 1:1 nachbau vom myavr board. funktioniert auch alles ganz prima. jetzt habe ich um bascom zu lernen ein kleines lauflichtprogramm gebastelt. es werden am anfang drei taster abgefragt und danach das betroffene lauflicht gestartet. aus irgendeinem grund den ich nicht finden kann fängt, wenn ich den atmega starte, lauflicht 2 an zu starten. findet jemand den fehler? wäre auch nett wenn mir jemand eine elegantere lösung zeigen könnte für so ein programm. Hier noch mein code:
$regfile = "m8def.dat"
$crystal = 1000000

'###Declarationen###
Config Portc = Output
Config Portd = Input
Portd = 1

Led1 Alias Portc.5
Led2 Alias Portc.4
Led3 Alias Portc.3
Led4 Alias Portc.2
Led5 Alias Portc.1
Led6 Alias Portc.0

'###Hauptschleife###

Do
If Pind.0 = 0 Then
Gosub Laufa
End If
If Pind.1 = 0 Then
Gosub Laufb
End If
If Pind.2 = 0 Then
Gosub Laufc
End If
Loop

'###Lauflichter###
Laufa:
bla bla bla
Loop

Return

'----------

Laufb:
Do
bla bla bla
Loop

Return

'----------

Laufc:
Do
bla bla bla
Loop

Return

MfG Omeg@
Frohe Weihnachten

Grillmeister Markus
24.12.2005, 23:33
funktionierts, wenn du das "loop" in den subroutinen weglässt? also z.B.

Laufa:
bla bla bla
Return

mfg Maggus

PS: dein "lauflicht" wird dann allerdings nur einmal durchlaufen. wenn du möchtest, dass es durchlaufen wird, bis ein anderes ausgewählt wird, dann musst du noch if-abfragen in die einzelnen subroutinen einbauen

Ratber
24.12.2005, 23:49
Mit den felhelnden Ausgaben im Code und nem Fetten Fehler den der compiler erst garnicht schluckt kann das wohl kaum das echte Programm sein .

Wie wärs denn mal damit ?

So kann man nichts sehen.
Die Lichterroutinen kannste aber weglassen wie bisher.

Ich gehe mal davon aus das die Taste vom Port nach Masse schalten ja ?
Statt der Pullups würde ich doch lieber externe Widerstände nach Vcc schalten .
Is erstmal sicherer.

Spannungsquelle der Schalunt ist stabil ?
Also kein Stcknetzteil oder sowas ?
Wenn Spannungsregler ala 78xx Haumichtot dann auch schön brav mit 100nF am Ausgang abgeblockt damit er nicht zum Sender mutiert ?

Yo,den anderen fällt vieleicht noch mehr ein.

Omeg@
25.12.2005, 11:13
Moin,

erstmal danke für die antworten. @ ratber: wie meinst du das mit dem echten programm? und wo is da ein fetter fehler? ich bin wie gesagt noch anfänger und kann dir nicht ganz folgen. vielleicht erklärst du mir das ja mal.
MfG Omeg@

Grillmeister Markus
25.12.2005, 11:31
so...dieser code hier sollte jetzt funktionieren. du kannst zum testen einfach mal statt "'code für lichter" z.B. "print "laufa"" einsetzen, um fehler bei der verkabelung der leds auszuschließen.
das lauflicht deiner wahl läuft mit diesem code hier so lange, bis du ein anders auswählst.



$regfile = "m8def.dat"
$crystal = 1000000

'###Declarationen###
Config Portc = Output
Config Portd = Input
Portd = 1

Led1 Alias Portc.5
Led2 Alias Portc.4
Led3 Alias Portc.3
Led4 Alias Portc.2
Led5 Alias Portc.1
Led6 Alias Portc.0

'###Hauptschleife###

Do
If Pind.0 = 0 Then
Gosub Laufa
End If
If Pind.1 = 0 Then
Gosub Laufb
End If
If Pind.2 = 0 Then
Gosub Laufc
End If
Loop

'###Lauflichter###
Laufa:

'code für lichter


If Pind.0 = 0 Then
Gosub Laufa
End If
If Pind.1 = 0 Then
Gosub Laufb
End If
If Pind.2 = 0 Then
Gosub Laufc
End If
Goto Laufa


'----------

Laufb:

'code für lichter


If Pind.0 = 0 Then
Gosub Laufa
End If
If Pind.1 = 0 Then
Gosub Laufb
End If
If Pind.2 = 0 Then
Gosub Laufc
End If
Goto Laufb

'----------

Laufc:

'code für lichter


If Pind.0 = 0 Then
Gosub Laufa
End If
If Pind.1 = 0 Then
Gosub Laufb
End If
If Pind.2 = 0 Then
Gosub Laufc
End If
Goto Laufc


mfg Markus

Torsten_G
25.12.2005, 12:13
Naja, eigentlich macht Dein Mega 8 doch nur, was Du ihm erzählst!

Schau mal hier, Deine Zuweisung lautet:

Portd = 1

Portd ist ein Byte, somit hat Portd den Status &B00000001, also Portd.0=1 -> der Rest Null, also wird die zweite Subroutine aufgerufen, und da bleibt er ja dann bis zum Ende aller Tage...

Versuch´s im Init mal mit Portd=255 bzw. Portd=&B11111111

Scheinbar hast Du aber auch noch ein Hardware-Problem, denn eigentlich müsste die Beschaltung am Portd ja direkt über den Init-Wert drüberbügeln.
Wie hast Du Deine Taster angeschlossen?
Mess doch mal nach, ob die Taster ihren jeweiligen Port tatsächlich auf GND ziehen.

Der Compiler-Error wird wohl daher kommen, dass Du in Deinem geposteten Code "blablabla" eingetragen hast.
Wenn man ein Problem mit einem Programm hat, ist es erheblich sinnvoller, den kompletten Code zu posten, dann können Dich die hilfreichen Geister hier viel besser untersützen!

Oder sind Deine Lauflicht-Routinen derartig innovativ, dass Du sie lieber geheim halten möchtest? :-# :mrgreen:

Viele Grüße

Torsten

Ratber
25.12.2005, 13:18
Moin,

erstmal danke für die antworten. @ ratber: wie meinst du das mit dem echten programm? und wo is da ein fetter fehler? ich bin wie gesagt noch anfänger und kann dir nicht ganz folgen. vielleicht erklärst du mir das ja mal.
MfG Omeg@

Hab ich doch schon.

Hat sich aber auch schon erledigt :wink:

Omeg@
25.12.2005, 19:14
vielen dank für die antworten!
ich habe meinen code jetzt etwas geändert und es funktoiniert so wie ich es wollte!!! ist schon gut zu wissen das man hier so gut beraten wird *schleim* :) ich poste mal meinen funktionierenden code für andere anfänger mit dem gleichen problem:
$regfile = "m8def.dat"
$crystal = 1000000

'###Declarationen###

Config Portc = Output
Config Portd = Input
Portd.0 = 1
Portd.1 = 1
Portd.2 = 1

Led1 Alias Portc.5
Led2 Alias Portc.4
Led3 Alias Portc.3
Led4 Alias Portc.2
Led5 Alias Portc.1
Led6 Alias Portc.0

'###Hauptschleife###

Do
If Pind.0 = 0 Then
Gosub Laufa
End If
If Pind.1 = 0 Then
Gosub Laufb
End If
If Pind.2 = 0 Then
Gosub Laufc
End If
Loop

'###Lauflichter###
Laufa:
' Lauflicht

Goto Laufa

'----------

Laufb:
' Lauflicht

Goto Laufb

'----------

Laufc:
' Lauflicht

Goto Laufc Das "' Lauflicht" muss dann mit entsprechendem code ausgetauscht werden. ich hab grad festgestellt das man das auch mit loop machen kann. dann muss nur goto weg gelassen werden.
MfG Omeg@