PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Newbie Frage(n)



meldano
29.03.2007, 07:03
Hallo,

als erstes möchte ich mich mal eben Vorstellen.
Mein Name ist Daniel. 26J, Energieelektroniker und auf dem Weg zum staatl. gepr. Elektrotechniker.
Programmierkentnisse: SPS- und Delphiprogrammierung. Beides nicht perfekt , aber man lernt ja immer dazu O:)

Vor zwei Tagen habe ich den µController Einstieg gewagt und mir bei Pollin das Evulation Board gekauft. Es war schön billig, so daß ich erst mal probieren kann. Jetzt habe ich hier die ganzen Tutorials gelesen um mir einen Überblick zu verschaffen. Einfache Programme, wie z.B. das Schalten einer LED auf Knopfdruck, laufen. Jetzt möchte ich aber doch mal eine "echte" Schaltung mit Programm entwickeln.
Folgendes Projekt hab ich im Auge:
Eine Radlampe über PWM gedimmt. Nach drei Sekunden Betätigen eines Schalters soll die Lampe in der kleinsten Dimmstufe einschalten. Nach drücken des Tasters soll man in die nächst höhere Dimmstufe wechseln können. Ist die dritte Stufe erreicht (Max Stufe), soll nach Betätigen des Tasters wieder in die erste Stufe gewechselt werden.
Wenn der Taster wieder 3 Sekunden betätigt wird, schaltet man die Lampe aus.

Folgenden Quelltext habe ich mal getippt (hier nur zwei PWM Stufen, und in den Sprüngen werden zum test nur led´s getogglet):

'Tell the compiler which AVR chip we use
$regfile = "m16def.dat"

'Tell the compiler which crystal frequency was used
$crystal = 16000000 '16.00000 MHz

'Specify baud rate for serial port
$baud = 9600


'################### Ausgänge ######################################
config portd.5 = Output 'Port D5 als Ausgang konfigurieren
led1 alias portd.5
config portd.6 = output 'Port D6 als Ausgang konfigurieren
led2 alias portd.6

'################### Eingänge ######################################
config pind.2 = input 'Pin D2 als Eingang konfigurieren
taster1 alias pind.2

'################### Variablen ######################################
Dim EIN as Bit
Dim A as Integer


do 'Beginn Hauptschleife
main:
if taster1=1 then 'Wenn Taster 3s gedrückt
waitms 3000
if taster1=1 then
goto schalten
end if
end if

if EIN =1 then 'Wenn EIN
if taster1=1 then 'Und Taster gedrückt
waitms 50
if taster1=1 then
incr A 'Variable um 1 erhöhen
end if
end if
end if

if A = 2 then 'Wenn Variable = 2
A = 0 'Variable wieder auf 0
end if

if EIN =1 then 'Wenn EIN
if A = 0 then ' UND A=0
goto PWM1 ' Gehe zu PWM1
end if
end if

if EIN =1 then 'Wenn EIN
if A=1 then ' UND A=1
goto PWM2 'Gehe zu PWM2
end if
end if

if EIN =1 then
led2 = 1
end if

loop 'ENDE


schalten: 'Eischalten
toggle EIN
A = 0 'Variable auf 0
goto main



PWM1:
toggle led1
goto main

PWM2:
toggle led2
goto main

Leider läuft es nicht so wie geplant, vielleicht kann mir ja hier jemand einen Tipp geben.

Ich wäre euch sehr dankbar!

Gruß
Daniel

helimike0705
29.03.2007, 17:46
wenn du das mal im simulator mit f8 schritt für schritt machst ,wirst du sehen das du immer wieder in deiner main mit der 3 sekunden abfrage landest. dort must du es ändern,bzw in der sub schalten. nicht wieder in die main sondern in eine zweite main springen nach der 3 sek abfrage.
habe aber mir die sache noch nicht genauer angeschaut.

meldano
29.03.2007, 20:50
Hallo Helimike,

danke für die Antwort!
Ich weiß aber leider nicht wie ich das Programm simulieren soll.
Der Debugger funktioniert bei meiner Bascom Demo Version nicht.

Was versteht man denn genau unter Subroutine?

Gruß
Daniel

helimike0705
30.03.2007, 16:37
ich habe mir die letzte demo von bascom geladen,da funzt alles,sowie in der letzten version.
eine subroutine ist ein programm-abschnitt in dem etwas abgearbeitet wird und von dem man aus wenn etwas erfüllt ist in einen anderen programm-abschnitt (routine) springt.wie in deinem programm z.b. der sprung ins "schalten:" oder "pwm1:","pwm2:
versuche mal nach deiner "main:" eine "main2:" in dem anschnitt zwischen den end if und deiner zweiten abfrage der taste bei "if EIN=1 then" als main2: zu deklarieren.gehe in den simulator und arbeite mit f8 alles schrittweise durch,dann kommst du schon darauf wie es ablaufen muss,so das es läuft wie du möchtest.eins noch wenn du in deine pwm
springst ist nach abarbeitung schluss,sprich du läufst ins leere -> ende programm,dort musst du wieder in eine abfrage der tasten springen.
hoffe dir soweit geholfen zu haben.