PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Bei Reset läuft Motor los



Euro
05.08.2006, 22:03
Hallo,

ich will mit meinem Roboter mal die ersten Gehversuche machen. Jetzt hab ich aber das Problem das wenn ich die RESET-Taste am RN-Control Board drücke einer der beiden Motoren los läuft und ich hab keine Ahnung wieso.


$regfile = "m32def.dat"
$crystal = 16000000
$baud = 9600

Config Adc = Single , Prescaler = Auto

Config Porta.7 = Input
Porta.7 = 1

Config Portc.6 = Output
Config Portc.7 = Output
Config Portb.0 = Output
Config Portb.1 = Output
Config Portd.4 = Output
Config Portd.5 = Output

Dim T As Word

Start Adc

Anf:
Sound Portd.7 , 200 , 200
Sound Portd.7 , 400 , 400
Waitms 40
T = Getadc(7)
If T > 500 Then Goto Anf


Sound Portd.7 , 400 , 350
Wait 2
Sound Portd.7 , 400 , 350
Wait 1

Portc.6 = 0 'Drehrichtung Links
Portc.7 = 1

Portb.0 = 0 'Drehrichtung Rechts
Portb.1 = 1

Portd.4 = 1 'Motor Links Ein
Portd.5 = 1 'Motor Rechts Ein

Pwm1a = 150
Pwm1b = 150

Wait 1

Pwm1a = 0
Pwm1b = 0

Portd.4 = 0
Portd.5 = 0

Sound Portd.7 , 400 , 350

Ratber
06.08.2006, 08:45
Sei mir nicht böse aber das wundert mich nicht im geringsten denn dein Programm ist von der Struktur her ein mittleres Chaos.


Die Definitionen sind ja noch ok.(Also bis "Startadc"

Danach fängst du eine Prozedur namens "anf:" an die nirgends endet.

Keine Hauptschleife und vorallendingen kein "END".
Dh. deine Programmabarbeitung läuft nach dem letzten Sound-Befehl ins Nirvana und es wird zufallscode ausgeführt.

Häng wenigstens ein "END" als letzte Zeile an um das Programmende zu definieren.(Datazeilen und EEProm-Inhalte stehen natürlich dahinter)



Kleiner Tip:

Gewöhn dir am besten gleich an deine Programme strukturiert zu schreiben
Das erhöht nicht nur die Lesbarkeit sondern hilft auch Fehler zu vermeiden.

chr-mt
06.08.2006, 09:00
Hi,
"config portc.6=Output" geht, soweit ich weiß, nicht.
Einzelne Pins werden immer mit "config pinx.y" konfiguriert.
(Auch wenn's Ausgänge werden sollen.)
Wundert mich, daß Bascom keine Fehlermeldung ausspuckt.

Bei Programmstart konfigurierst du die Pins zwar, setzt sie aber nicht.
Erst nach über 3 Sekunden (Wait bei den Sounds) setzt du die.
Heißt, aus deinen PWM Ports kommt so lange eine Dauer "1" raus..
(Wo konfigurierst du die PWMs ? bzw. die Timer ?)

Wie Ratber schon richtig sagte, läuft dein Programm in's Nirvana.
Der Controller startet so immer neu.

Auch eine Art, eine Schleife zu machen :)


Gruß
Christopher

Euro
06.08.2006, 11:08
Morgen,

ich hab mein Programm jetzt mal nach euren Ratschlägen umgeschrieben:


$regfile = "m32def.dat"
$crystal = 16000000
$baud = 9600

Config Adc = Single , Prescaler = Auto

Config Pina.7 = Input 'Config ADC für Tastenabfrage
Porta.7 = 1

Config Pinc.6 = Output 'Config Ports und PWM für Motoren
Config Pinc.7 = Output
Config Pinb.0 = Output
Config Pinb.1 = Output
Config Pind.4 = Output
Config Pind.5 = Output

Portc.6 = 0 'Drehrichtung Links
Portc.7 = 1

Portb.0 = 0 'Drehrichtung Rechts
Portb.1 = 1

Portd.4 = 1 'Motor Links Ein
Portd.5 = 1 'Motor Rechts Ein

Config Timer1 = Pwm , Pwm = 10 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down

Pwm1a = 0
Pwm1b = 0
Tccr1b = Tccr1b Or &H02 'Prescaler = 8

Dim T As Word

Start Adc

Sound Portd.7 , 200 , 200
Sound Portd.7 , 400 , 400

T = Getadc(7)
While T > 500 'Verlasse Schleife nach drücken beliebiger Taste
T = Getadc(7)
Print T
Wend


Print "start erfolgt" 'Startbedingung wurde erfüllt
Sound Portd.7 , 400 , 400
Waitms 100

Pwm1a = 300 'Fahre los
Pwm1b = 300

Wait 2

Pwm1a = 0 'Halte An
Pwm1b = 0

Portd.4 = 0
Portd.5 = 0

Sound Portd.7 , 400 , 350

End 'end program

Und jetzt scheint es auch zu laufen. \:D/

Danke!