PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Anfängerfrage zu Sensoren



Foooob
01.09.2005, 23:04
Abend

Also ich habe ein kleines Problem, für euch sicher kein Problem ;-)

Ich habe einen Sensorik, die sendet an meinen Mega8 ein 5V Signal und auf dieses Signal soll der Mega8 reagieren.

Wäre das so korrekt umgesetzt?




$regfile = "m8def.dat" 'ATmega8
$crystal = 3686411 'Quarz: 3686411 Hz


Ddrc = &B00000000
Ddrd = &B11110000 'Pin PD4 bis PD7 als Ausgänge

Do
Portd.4 = 0
Portd.5 = 0

If Pinc.0 = 1 Then 'Sensorik

Portd.4 = 1
Portd.5 = 1
Waitms 2000
End If

Loop
End



Denn bei mir funktioniert das irgendwie nicht richtig...wenn ich hier das ok bekomme dass es funktionieren sollte kann ich davon ausgehen dass meine Elektronik nichts taugt.

Gruß
Foooob

EDIT: Und noch eine Frage...erkennt ein Mega8 eigentlich auch Eingangsspannungen die nicht 5V sondern 3,6V haben?

Marco78
02.09.2005, 15:47
In der DDR für D gibst du 0 für einen Ausgang an.
Im Programm sind D.4 und D.5 Ausgänge.
C.0 ist ein Eingang. Ist mit der DDR aber auch mit 0 eingestellt.

Ich behaupte mal, da ist ein Denkfehler drin.

fzehner
02.09.2005, 17:26
In der DDR für D gibst du 0 für einen Ausgang an.


Er setzt die Ausgänge mit eins, was richtig ist.

Den Fehler würde ich eher am Eingang suchen. Am Eingang muß ein sauberes Signal anliegen. Die 3.6V kann der AVR schon als 1 erkennen.

@Foooob: Es würde helfen, wenn Du den Sensor und seine Beschaltung hier etwas näher beschreibst.

Gruss
Frank

Marco78
02.09.2005, 18:15
Ddrd = &B11110000 'Pin PD4 bis PD7 als Ausgänge
Geht das bei PD7 los und endet mit PD0???

BlooD
02.09.2005, 18:54
@marco78:
ja, genau so würde ich schon sagen; Aussage stimmt also mit Kommentar überein.

@Fooob:
Sehe eigentlich keinen Fehler im Programm, aber probiers mal mit PullDown 10k oder sowas. Liegt wahrscheinlich eher am elektronischen Teil.

3,6 Volt reichen sicher für einen HIGH-Pegel.

Foooob
03.09.2005, 14:29
Okay, ich dachte die Sache wäre leichter und es würde sich nur um einen Denkfehler handeln.
Um das im vollen Ausmaß zu erklären muss ich den Quellcode minimal ändern.




$regfile = "m8def.dat" 'ATmega8
$crystal = 3686411 'Quarz: 3686411 Hz

Ddrc = &B00000000
Ddrd = &B11110000 'Pin PD4 bis PD7 als Ausgänge

Do
Portd.4 = 1
Portd.5 = 0
Portd.6 = 1
Portd.7 = 0

If Pinc.0 = 1 Then 'Sensorik

Portd.4 = 0
Portd.5 = 0
Portd.6 = 0
Portd.7 = 0
Waitms 2000
End If

Loop
End


Dürfte nichts an der nun bewiesenen Korrektheit des Programms ändern.

Nun mein Problem.
An PORTD.4 bis 7 liegen 2 Getriebemotoren.
Wie man sieht sind die Motoren zunächst in Bewegung und sollen dann bei einem High-Signal auf PIN C0 stoppen.

In der Praxis zeigt sich aber folgendes: Die Motoren laufen am Anfang beide korrekt. Kommt nun das High-Signal stoppt aber nur einer der beiden Motoren. Den anderen lässt das komplett kalt.
Aber an was kann das liegen wenn der Motor der nicht mitzieht am anfang mitanläuft. Wenn ich den Motor im Quellcode deaktiviere dann läuft er auch am Anfang nicht an. Er reagiert nur auf die If-Bedingung nicht. Die lässt ihn kalt. Der andere Motor hingegen macht alles was man ihm sagt.

BlooD
03.09.2005, 15:12
- Hast vielleicht einen Timer mit dem Port PD4 oder PD5 belegt?
oder bertiffts die anderen Ports?

Foooob
03.09.2005, 15:19
Dies ist der gesamte Quelltext. Ich habe keine timer oder andere Doppelbelegungen gemacht.

Marco78
03.09.2005, 15:28
Wie sind die Motoren den angeschlossen? Hast du einen Schaltplan dazu?
Sie sind ja sicherlich nicht direkt an die Pins angeschlossen? Hast du die Schaltung mal überprüft?
Hast du an den Pins mal Spannungen gemessen?

Foooob
03.09.2005, 16:16
Ahhh ich hab den Fehler...
Ich hab die PWM Leitung mit einem zur Steuerung verwechselt. Deswegen reagierte der Motor nicht aber bewegte sich trotzdem...

Danke für die Hilfe

BlooD
03.09.2005, 16:30
wusst ich doch das hier der fehler nicht liegt :)