Hallo zusammen. ich schreibe ein Programm, dass nach dem Aufstarten des PIC's eine Spannung einlesen soll und dazu proportional lang einen Timer zählen lassen soll. (Eingangsspannung z.b. 1V ==> 1Sekunde, 2V ==> 2Sekunden...) Nach Ablauf der zeit soll eine LED angesteuert werden. Nun habe ich den code geschrieben und es funktioniert einfach nicht und ich weiss echt nicht mehr weiter. Hat jemand von euch eine Ahnung was ich falsch mache: Code programmiert mit MPLAB IDE v.7.2 auf einem PICKit1 mit 16F684! #include <pic.h> unsigned int inputh ; // variable für AD-Input unsigned int inputl ; // variable für AD-Input unsigned int i = 0; // Anzahl Durchläufe der Timer1 unsigned int n = 0; // laufvariable __CONFIG(WDTDIS & INTIO & MCLRDIS & PWRTEN); // Power-Up-Timer (64ms), Watchdog off void INIT () { PEIE = 1; PIE1 = 0x81; GIE = 1; } void delay(int time0) { OPTION = 0xC7; TMR0 = 0x0; while (time0 != 0) { if (T0IF) // if T0 Interrupt { T0IF = 0; // clear Interrupt Flag time0 = time0 - 1; } } // T0IE = 0; } void read_voltage() { CMCON0 = 0x00; TRISA = 0xFF; // Alle Ports als Eingänge definiert; ANSEL = 0x01; // Wahl von Chanel 1 als analoger Eingang ADCON0 = 0x83; // AD-Configuration Byte ADCON1 = 0x00; // conversation Clock für AD inputh = ADRESH; // übergabe von AD-Wert inputl = ADRESL; // übergabe von AD-Wert GODONE = 1; // Ende AD-Wandlung ANSEL = 0x00; i = 0xFF;//(inputh*128)+inputl; // Übertrag von ADRESH und ADRESL n = 0x00; } void interrupt isr(void) { if (TMR1IF) { TMR1IF = 0; // Clear Interruptflag // TRISA = 0x2B; // PORTA = 0x10; TMR1H = 0x00; // Timer1 preload TMR1L = 0x00; // Timer1 preload if (n < i) { n = n + 1; // Increment durchgaenge } } } void main () { INIT (); delay(0); // ==> ==> ==> ==> noch zu klären read_voltage(); // Unterfunktion aufrufen zur AD-Einlesen TMR1H = 0x00; // Timer1 preload TMR1L = 0x00; // Timer1 preload T1CON = 0x01; // Timer1 Controllregister inkl. Start (PRESCALE 1:4) (35) TMR1IE = 1; while (1) { if (n > i) // Timer genügen oft durchloffen { TRISA = 0x0F; PORTA = 0x20; } else { while (1) { TRISA = 0x0F; PORTA = 0x10; } } }
n und i sind gleich 0, also bleibt er in der Schleife while (1) { TRISA = 0x0F; PORTA = 0x10; } hängen. Mit dem Simulator lässt sich so etwas recht einfach nachvollziehen.
Hallo Steffen Danke für deine schnelle Hilfe. Hab nun den Code etwas angepasst... natürlich haben sich zwei, drei neue, kleine Fehler eingeschlichen aber die werde ich schon noch finden.. Danke, Martin
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.