PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Ungewollte Aktivierung einer Funktion. Bitte helft mir!!!



UriAn
01.12.2005, 09:10
Hallo,
kann mir jemand helfen.
schreibt irgend was, was euch dazu einfällt. :roll:

ich habe eine schaltung aufgebaut die richtig sein soll.???
kann sie nur nicht so programieren dass sie löpt.

http://www.mikrocontroller.net/images/taster.gif
gegeben:

-Vcc = 5v gleichspannung (stabiel)
-GND = 0V
-PD = pinc.4 ( input)


Also ich habe das:

-RN-Control 1.4 Mega32
-[BSctrl32]
und möchte einen taster anschliessen an den I/O port anschliesen.
habe ich nun auch, aber mit meiner programmierung funtzt es net richtig. Löst manchmal die Sub Ausweichen aus, wenn die kontakte sich nicht berühren.


ich proge mit Bascom AVR-Basic.
hier mein prog:


()$regfile = "m32def.dat"
$crystal = 16000000


Declare Function Tasterab() As Word
Declare Sub Vor()
Declare Sub Ausweichen()

Config Pinc.4 = Input
'Motor
'links
Config Pinc.6 = Output 'Linker Motor Kanal 1
Config Pinc.7 = Output 'Linker Motor Kanal 2
Config Pind.4 = Output 'Linker Motor PWM
'rechts
Config Pinb.0 = Output 'Rechter Motor Kanal 1
Config Pinb.1 = Output 'Rechter Motor Kanal 2
Config Pind.5 = Output



Config Timer1 = Pwm , Pwm = 10 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down
Tccr1b = Tccr1b Or &H02

Sound Portd.7 , 400 , 450 'BEEP
Sound Portd.7 , 400 , 250 'BEEP
Sound Portd.7 , 400 , 450


Dim Taster As Word
Do

Taster = Tasterab()
If Taster = 1 Then
Call Ausweichen()
Sound Portd.7 , 300 , 200
Else
Call Vor()
End If
Loop
End

Function Tasterab()

Tasterab = 0
If Pinc.4 = 0 Then
Tasterab = 1
Else
Tasterab = 0
End If

End Function Tasterab() As Word

Sub Vor()

Portc.6 = 0
Portc.7 = 1
Portd.4 = 1

Portb.0 = 0
Portb.1 = 1
Portd.5 = 1


Pwm1a = 220
Pwm1b = 220


End Sub Vor()


Sub Ausweichen()
Pwm1a = 0
Pwm1b = 0
Wait 1
Portc.6 = 1
Portc.7 = 0
Portd.4 = 1

Portb.0 = 1
Portb.1 = 0
Portd.5 = 1
Pwm1a = 200
Pwm1b = 200
Wait 3
Pwm1a = 0
Pwm1b = 0
Portc.6 = 0
Portc.7 = 1
Portd.4 = 1

Portb.0 = 1
Portb.1 = 0
Portd.5 = 1
Pwm1a = 200
Pwm1b = 200
Wait 1
Pwm1a = 0
Pwm1b = 0
Wait 5



End Sub Ausweichen()


WArum oder besser habe ich einen fehler im prog oder in der schaltung ?????



DANKE der UriAn
BITTE HELFT MIR.

gandalf
21.01.2006, 21:31
Mich wundert, daß hier noch keiner geantwortet hat.
Dein Prog ist mir allerdings etwas zu hoch. Mich wundert, daß dein Bascom hier nicht meckert, denn so wie ich das sehe (bin selbst Anfänger) stimmen die Deklarationen der Ports nicht.

Config Pinc.4 = Input <- deklariert c.4 als Eingang
PortC.4=1 <- aktiviert internen Widerstand, spart also R2

Das Ganze ist nicht sehr logisch, funktioniert aber leider so.

Hier nun der Fehler:
Config Pinc.6 = Output <- Eingang (PinC.6) ist Ausgang (PortC.6) ?

So sollte das dann laufen:
Config PortC.6 = Output <- Achtung: Ausgang = Port

Hier ein kleines Prog zum testen:




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

config PinC.4 = input 'PinC.4 als Eingang
PortC.4 = 1 'internen Pullup ein, Taster geht auf Masse

config PortC.5 = Output 'Port C.5 als Ausgang , 470R - LED - Gnd

do

if PinC.4 = 0 ' Taster betätigt (0)
then PortC.5 =1 ' Led an
else Port C.5 = 0 ' sonst aus !

loop
end



Das sollte funktionieren, hab grad nix zum testen da.

Die Antwort kommt etwas spät, hilft aber vieleicht anderen, die die selben Probleme haben.

Bernd

ruediw
24.01.2006, 18:29
Zusätzlich dürfte der Taster prellen...

chr-mt
24.01.2006, 18:38
Config Pinc.6 = Output <- Eingang (PinC.6) ist Ausgang (PortC.6) ?
Die Umschaltung einzelner Pins wird sowohl bei Output als auch bei Input mit "Pin" gemacht.

Also ist die Schreibweise pinc.6 =Output richtig

Gruß
Christopher