PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Motor über Taste mit if funkt nicht



AVRboy
05.09.2006, 19:54
Hi,

ich bin am verzweifeln mein kleines Prog geht einfach nich so wie ich will schaut mal drüber. wenn ich denn taster drück geht er nich in die schleife und wenn die taster dinger drausen sind wechsel die leds nicht. kann ich das vieleicht anders lösen und das is falsch oder bin ich nur zu "dumm".




$regfile = "m8def.dat"
$crystal = 4000000
$baud = 19200

Config Pinb.1 = Output
Config Pinb.2 = Output
Config Pind.6 = Input
Config Pind.5 = Input
Config Pinc.0 = Output
Config Pinc.1 = Output
Config Pinc.2 = Output


Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up , Prescale = 1024


Do
Sound Portc.2 , 400 , 450 anfangs ein sound

If Pind.6 = 1 Then taster abfrage
Goto Vor

End If

Sound Portc.2 , 400 , 250 eine sound

If Pind.5 = 1 Then und anderer taster
Goto Zuruck

End If

Loop Und von vorne

Vor:
Compare1a = 100 motor leuft vor
Portc.0 = 1
Waitms 50
Portc.1 = 0
Waitms 50

Zuruck: motor leuft zuruek
Compare1a = 100
Portc.0 = 0
Waitms 50
Portc.1 = 1
Waitms 50








End





ich hoffe ihr könnt mir helfen oder es mir einfach besser zeigen.
das ich nicht die schönsten progs der welt schreibe weiss ich.
compliemirt habe ich ohne kommentare ins ja klar oder so .......

mfg m.r.

hackspider
06.09.2006, 13:20
Hi

Wegen dem problem das dein prog nicht der sprungmarke folgt könntest du dir den befehl debounce mal anschauen:

Do
debounce Taster1 ->marke1
debounce Taster2 ->marke2
loop

marke1:
...
marke2:
...

end

mfg hackspider

AVRboy
06.09.2006, 19:35
hi,

ich werde mir das gleic mal durch arbeiten aber ich habe da jetzt noch was anderes gemacht ich habe micro basic for avr von mikroelektronika genommen das da war ein bsp für butons und das ist auch mit if das habe ich comp... und mit avr studio in den mega 8 gebrannt und das funkt richtig gut




program Led_Blinking1_avr_mega_8

main:
DDRC = $FF ' PORTC to be output
PORTC = $00 ' Turn off the led on PORTC
PortB = $00


while TRUE
if Button(PORTB, 0, 100, 0) = TRUE then ' if button on PORTB.0 is 5v for 100ms
PORTC = $01 ' then turn on LED on PORTC.0
end if
if Button(PORTB, 1, 100, 0) = TRUE then
PORTC = $02
end if
if Button(PORTB, 2, 100, 0) = TRUE then
PORTC = $04
end if
if Button(PORTB, 3, 100, 0) = TRUE then
PORTC = $08
end if
wend
end.
end.



also bascom hat irgend wie ein problem mit mir.oder so

Tom K
07.09.2006, 12:30
Hi

was ich schnell imüberblick gesehen habe verwendest du "GOTOxxxx"

nur sehe ich nicht das du in Die DO LOOP Scheife zurück kehrst!

AVRboy
08.09.2006, 20:02
stimmt merke ich erst jetzt. (das mache ich doch dann mit goto do oder )

upps naja mein fehler da habe ich wohl geschlafen das prog habe ich nachts um 3 geschrieben.



mfg

m.r.

Tom K
08.09.2006, 23:02
So müste es gehen


$regfile = "m8def.dat"
$crystal = 4000000
$baud = 19200

Config Pinb.1 = Output
Config Pinb.2 = Output
Config Pind.6 = Input
Config Pind.5 = Input
Config Pinc.0 = Output
Config Pinc.1 = Output
Config Pinc.2 = Output

declare sub vor
declare sub zuruck
Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up , Prescale = 1024


Do
Sound Portc.2 , 400 , 450 'anfangs ein sound

If Pind.6 = 1 Then Vor

End If

Sound Portc.2 , 400 , 250 ' eine sound

If Pind.5 = 1 Then Zuruck

End If

Loop ' Und von vorne
sub vor
Compare1a = 100 'motor leuft vor
Portc.0 = 1
Waitms 50
Portc.1 = 0
Waitms 50
end sub

sub Zuruck 'motor leuft zuruek
Compare1a = 100
Portc.0 = 0
Waitms 50
Portc.1 = 1
Waitms 50
end sub







End




Das goto Do kenn ich nur von "C" aber in Bascom was ich weis funkt es nicht

Stromi
10.09.2006, 22:13
Wenn du Prozessor wärest, so must du das sehen, warum sollte dein Programm nach der ersten Sprungmarke und den nachfolgenden Anweisungen zurück springen und bei welcher Anweisung, steht ja nicht's, also nimmt er den nächsten Befehl und so weiter.
Mein Vorschreiber macht's richtig. Er benutzt gosub mit deklaration und end sub usw. Da wird es richt gut aufgezeigt.
Allerdings sieht man nicht so erklärend (für einen Anfänger), dass Gosub benutzt wird. Aber so ist es super gemacht.