PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Programm will nicht so wie ich--> bitte Fehlersuche



strunz
15.03.2006, 11:32
Hallo Leute,
ich habe hier mal folgenden code zusammengeschrieben:



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

Rem Portb.4 = 1 --> Motor links vor
Rem Portb.5 = 1 --> Motor links rück
Rem Portb.6 = 1 --> Motor rechts vor
Rem Portb.7 = 1 --> Motor links rück


Config Portb = Output
Config Portd = Input
Config Portc = Input




Do


' Alles Weiß --> vorwärts
If Pinc.2 = 1 Then

If Pind.2 = 0 And Pind.3 = 0 And Pind.4 = 0 And Pind.5 = 0 And Pind.6 = 0 Then
Portb.4 = 1
Portb.5 = 0
Portb.6 = 1
Portb.7 = 0
End If

If Pind.2 = 0 And Pind.3 = 0 And Pind.4 = 0 And Pind.5 = 0 And Pind.6 = 1 Then
Portb.4 = 1
Portb.5 = 0
Portb.6 = 0
Portb.7 = 1
End If

If Pind.2 = 0 And Pind.3 = 0 And Pind.4 = 0 And Pind.5 = 1 And Pind.6 = 1 Then
Portb.4 = 1
Portb.5 = 0
Portb.6 = 0
Portb.7 = 0
End If

If Pind.2 = 0 And Pind.3 = 0 And Pind.4 = 0 And Pind.5 = 1 And Pind.6 = 0 Then
Portb.4 = 1
Portb.5 = 0
Portb.6 = 0
Portb.7 = 0
End If

If Pind.2 = 0 And Pind.3 = 0 And Pind.4 = 1 And Pind.5 = 1 And Pind.6 = 0 Then
Portb.4 = 1
Portb.5 = 0
Portb.6 = 1
Portb.7 = 0
End If

If Pind.2 = 0 And Pind.3 = 0 And Pind.4 = 1 And Pind.5 = 0 And Pind.6 = 0 Then
Portb.4 = 1
Portb.5 = 0
Portb.6 = 1
Portb.7 = 0
End If

If Pind.2 = 0 And Pind.3 = 1 And Pind.4 = 1 And Pind.5 = 0 And Pind.6 = 0 Then
Portb.4 = 1
Portb.5 = 0
Portb.6 = 1
Portb.7 = 0
End If

If Pind.2 = 0 And Pind.3 = 1 And Pind.4 = 0 And Pind.5 = 0 And Pind.6 = 0 Then
Portb.4 = 0
Portb.5 = 0
Portb.6 = 1
Portb.7 = 0
End If

If Pind.2 = 1 And Pind.3 = 1 And Pind.4 = 0 And Pind.5 = 0 And Pind.6 = 0 Then
Portb.4 = 0
Portb.5 = 0
Portb.6 = 1
Portb.7 = 0
End If

If Pind.2 = 1 And Pind.3 = 0 And Pind.4 = 0 And Pind.5 = 0 And Pind.6 = 0 Then
Portb.4 = 0
Portb.5 = 1
Portb.6 = 1
Portb.7 = 0
End If

If Pind.2 = 1 And Pind.3 = 1 And Pind.4 = 1 And Pind.5 = 1 And Pind.6 = 1 Then
Portb.4 = 0
Portb.5 = 1
Portb.6 = 0
Portb.7 = 1
End If

End If

If Pinc.2 = 0 Then
Portb.4 = 0
Portb.5 = 0
Portb.6 = 0
Portb.7 = 0
End If

Loop


Es ist ein code für einen Liniensucher mit cny70 sensoren.

Jetzt habe ich aber folgendes Problem:
Es funktioniert nur bei komplett schwarzem untergrund richtig(die räder drehen rückwärts).

bei weissem untergrund schalten die motoren willkürlich durch die gegend.

Habe die pins an portd.2 bis portd.6 wärend dem weissen untergrund mal gemessen: die scheinnen irre schnell zwischen hi und low zu schalten...

Habe ich im code was vergessen? Ist er selbst fehlerhaft?

Bitte um mithilfe.

-=[Cassiopeia]=-
15.03.2006, 12:06
mmmh interessanter programmierstil :-)
nein spass bei seite wo sind nun die sensoren dran? an pind 2-6 oder nur einer an pinc.2 ?
du könntest als erstes mal versuchen die if abfrage mit waitms 100 zb zu entprellen vielleicht hilft das weiter.

die schaltung für die cny 70 sind soweit ok?

Torsten_G
15.03.2006, 12:11
Und schalte doch mal die internen Pullups ein, möglicherweise hängt der Pin in der Luft bei weißem Grund?

Portc=&B11111111
Portd=&B11111111

(Nach dem Config .... =Input)

Grüße

Torsten

strunz
15.03.2006, 12:18
Das mit den pullups habe ich in meiner schaltung berücksichtigt (10kOhm an Vcc). Die schaltung ist auch i.O. ich kann die sensoren abgleichen und bekomme ohne das Programm auch saubere high/low signale bei sw/ws übergang.
die 100ms bewirken nur, dass die motoren nicht so schnell schalten, sondern ruckartig.

Danke aber trotzdem
Noch welche vorschläge?

strunz
15.03.2006, 13:39
Bin grad am fehler suchen, wollte mal fragen ob mir jemand bestätigen kann, dass die schaltschwelle zwischen HI und LOW beim ATMEGA32 bei 1,35V liegt?

-=[Cassiopeia]=-
15.03.2006, 13:56
sers
also meines wissens nach ist alles über 4,2 volt high.