Hallo,
ich beschäftige mich immer wieder mal mit dem Thema AVRs und deren Programmierung aber so ganz bin ich da noch nicht eingestiegen
Nun da meine Prüfungen vorbei sind habe ich mir zwei Mega 8 besorgt und einen Kodierschalter dazu. Meine Herausforderung war es die Schaltstellung des Schalters ab zu fragen und dann einen Impuls in verschiedenen Abständen an einem Pin aus zu geben. Diesen "Intervallauslöser" brauche ich für Stop-Motion-Filme.
Jetzt habe ich den Code im einfachsten Stil zusammengeschrieben und wollte das ganze testen aber der µC macht nur ein paar Zustandswechsel an der angeschlossenen LED und das war es dann. Würde sich da jemand mal erbarmen meinen Code anzusehen?
Was mache ich falsch und warum dauert der Abstand zwischen den Intervallen nicht 1 Sekunde wenn ich sage Waitms 1000, was mache ich falsch ?
Gruß Johannes
Code:$regfile = "m8def.dat" ' Konfiguration mit extrenem Quarz $crystal = 3686411 $hwstack = 40 $swstack = 16 $framesize = 32 Config Portc.4 = Output 'Das ist der Ausgang für den IR-Auslöser Config Pind.0 = Input 'Mit PinD.0 -3 Werden die Pins des Codierschalters (PT65 303) verbunden Config Pind.1 = Input Config Pind.2 = Input Config Pind.3 = Input Pind.0 = 1 'Internen Pull-Up Widerstand eingeschalten Pind.1 = 1 Pind.2 = 1 Pind.3 = 1 Do If Pind.0 = 0 And Pind.1 = 0 And Pind.2 = 0 And Pind.3 = 0 Then '0,5 Sekunden Waitms 20 '20 ms um ein Prellen abzuwarten Portc.4 = 1 Waitms 500 Portc.4 = 0 Waitms 30 '30ms um dem Auslöser Zeit zu geben End If If Pind.0 = 1 And Pind.1 = 0 And Pind.2 = 0 And Pind.3 = 0 Then '1 Sekunde Waitms 20 Portc.4 = 1 Waitms 1000 Portc.4 = 0 Waitms 30 End If If Pind.0 = 0 And Pind.1 = 1 And Pind.2 = 0 And Pind.3 = 0 Then '2 Sekunden Waitms 20 Portc.4 = 1 Waitms 2000 Portc.4 = 0 Waitms 30 End If If Pind.0 = 1 And Pind.1 = 1 And Pind.2 = 0 And Pind.3 = 0 Then '4 Sekunden Waitms 20 Portc.4 = 1 Waitms 4000 Portc.4 = 0 Waitms 30 End If If Pind.0 = 0 And Pind.1 = 0 And Pind.2 = 1 And Pind.3 = 0 Then '8 Sekunden Waitms 20 Portc.4 = 1 Wait 8 Portc.4 = 0 Waitms 30 End If If Pind.0 = 1 And Pind.1 = 0 And Pind.2 = 1 And Pind.3 = 0 Then '16 Sekunden Waitms 16 Portc.4 = 1 Wait 4 Portc.4 = 0 Waitms 30 End If If Pind.0 = 0 And Pind.1 = 1 And Pind.2 = 1 And Pind.3 = 0 Then '32 Sekunden Waitms 20 Portc.4 = 1 Wait 32 Portc.4 = 0 Waitms 30 End If If Pind.0 = 1 And Pind.1 = 1 And Pind.2 = 1 And Pind.3 = 0 Then '48 Sekunden Waitms 20 Portc.4 = 1 Wait 48 Portc.4 = 0 Waitms 30 End If If Pind.0 = 0 And Pind.1 = 0 And Pind.2 = 0 And Pind.3 = 1 Then '60 Sekunden Waitms 20 Portc.4 = 1 Wait 60 Portc.4 = 0 Waitms 30 End If If Pind.0 = 1 And Pind.1 = 0 And Pind.2 = 0 And Pind.3 = 1 Then '75 Sekunden Waitms 20 Portc.4 = 1 Wait 75 Portc.4 = 0 Waitms 30 End If If Pind.0 = 0 And Pind.1 = 1 And Pind.2 = 0 And Pind.3 = 1 Then '90 Sekunden Waitms 20 Portc.4 = 1 Wait 90 Portc.4 = 0 Waitms 30 End If If Pind.0 = 1 And Pind.1 = 1 And Pind.2 = 0 And Pind.3 = 1 Then '105 Sekunden Waitms 20 Portc.4 = 1 Wait 105 Portc.4 = 0 Waitms 30 End If If Pind.0 = 0 And Pind.1 = 0 And Pind.2 = 1 And Pind.3 = 1 Then '120 Sekunden Waitms 20 Portc.4 = 1 Wait 120 Portc.4 = 0 Waitms 30 End If If Pind.0 = 1 And Pind.1 = 0 And Pind.2 = 0 And Pind.3 = 1 Then '150 Sekunden Waitms 20 Portc.4 = 1 Wait 150 Portc.4 = 0 Waitms 30 End If If Pind.0 = 0 And Pind.1 = 1 And Pind.2 = 1 And Pind.3 = 1 Then '180 Sekunden Waitms 20 Portc.4 = 1 Wait 180 Portc.4 = 0 Waitms 30 End If If Pind.0 = 1 And Pind.1 = 1 And Pind.2 = 1 And Pind.3 = 1 Then '210 Sekunden Waitms 20 Portc.4 = 1 Wait 210 Portc.4 = 0 Waitms 30 End If Loop End







Zitieren

Lesezeichen