Huhu!
Da ich neu bin erst mal ein großes hallo an alle hier
Und direkt mein Problem:
Ich hab mich in letzter Zeit recht viel mit Microcontroller-Programmierung beschäftigt. Nun habe ich hier einige PIC16F628A und einen amateurhaft-selber-geätzten PIC-Programmer. Nachdem meine ersten Programme (LED blinken lassen, ...) funktioniert haben, wagte ich mich auch an kompliziertere Dinge (aktuell: Steuerung für einen Platinen-Belichter, wenn der klappt ein DMX-Sender).
Leider habe ich zum einen das Problem, dass der Programmer nur bei ~ 1/10 aller programmiervorgänge überhaupt etwas tut und dass das Programm scheinbar kein Stück funktioniert.
Hier zunächst mal der Code an sich:
Am Anfang des Codes steht die Belegung, zur Verdeutlichung ist im Anhang nochmal ein Schaltplan (Das ganze ist auf 2 Platinen verteilt, welche über ein Flachbandkabel miteinander verbunden sind).Code:/* * Belichtungstimer v1.0 * Autor: Josef Burg * * Portbelegung: * ----------------------------------------------- * PortA.0: Taster zum erhöhen von time * PortA.1: Taster zum erniedrigen von time * PortA.2: Anode 1. Siebensegmentanzeige * PortA.3: Anode 2. Siebensegmentanzeige * PortA.4: Anode 3. Siebensegmentanzeige * PortA.5: Start/Stop-Taster * PortA.6: Anschluss grüne "Im Betrieb"-LED * PortA.7: Relais zum schalten der UV-Röhren * PortB.0: Kathode A-Segment * PortB.1: Kathode B-Segment * PortB.2: Kathode C-Segment * PortB.3: Kathode D-Segment * PortB.4: Kathode E-Segment * PortB.5: Kathode F-Segment * PortB.6: Kathode G-Segment * PortB.7: - */ #include <16F628A.h> #include "delay20.c" #define Null 0b.0100.0001; #define Eins 0b.0111.1001; #define Zwei 0b.0010.0100; #define Drei 0b.0011.0000; #define Vier 0b.0001.1001; #define Funf 0b.0001.0010; #define Sechs 0b.0000.0010; #define Sieben 0b.0111.1000; #define Acht 0b.0000.0000; #define Neun 0b.0001.0000; // Wenn PortB eines dieser Bytes zugewiesen wird, sollte die angegebene Zahl erscheinen #pragma config = 0b.1111.1111.0011 // Bit 1,0 : 11-RC, 10-HS, 01-XT, 00-LP // Bit 2 : 1 - Watchdog Ein, 0 - Watchdog Aus // Bit 3 : 0- Power up Timer Ein, 1- Power up Timer Aus // Bit's 13...4 : 0-Leseschutz Ein, 1-Leseschutz Aus // --> Hier also: Oszilator RC (Intern), Watchdog aus, PuT ein und Leseschutz aus void Delay1s( uns16 time) { do { Delay1ms(1000); } while ( -- time != 0); } void output(int time) { } void main(void) { TRISA = 0b.0010.0011; // Am Port A sind Pins 5, 1 und 0 (Pins 17, 18 und 16) als Eingänge definiert - der Rest als Ausgänge TRISB = 0b.0000.0000; // Alle Pins an Port B als Ausgänge für die Anzeige int time; // Variable für die Wartezeit time = 0; // Initialisieren bit up @ PORTA.0; // Über up wird der Taster zum erhöhen der Zeit angesprochen bit down @ PORTA.1; // Über down der Taster zum erniedrigen bit start @ PORTA.5; // Und über start - wie könnte es anders sein - der zum starten bit LED @ PORTA.6; // Variable zum ansprechen der BetriebsLED bit UV @ PORTA.7; // Variable zum Ansprechen der UV-Röhren bit S1 @ PORTA.2; bit S2 @ PORTA.3; bit S3 @ PORTA.4; char Disp @ PORTB; // Display an PortB while(1) { // Endlosschleife if (up) { // Wenn die Erhöhen-Taste gedrückt wird time++; // Erhöhe den Stand output(time); // Gib den neuen Stand des Timers aus Delay1ms(100); // 0,1s zum entprellen warten if(up) { // Solange man die Taste gedrückt hält, wird zunächst 0,5s gewartet, dann jede 0,1s um 1 erhöht Delay1ms(500); while(up) { time++; output(time); Delay1ms(100); } // Ende while } // Ende if } // Ende if if (down) { // Für die Erniedrigen-Taste das gleiche in grün time--; output(time); Delay1ms(100); if(down) { Delay1ms(500); while(down) { time--; output(time); Delay1ms(100); } // Ende while } // Ende if } // Ende if if (start) { // Wenn start gedrückt wird LED = 1; // LED einschalten if (time > 5) { // Röhren nur einschalten wenn länger als 5sec ein um beschädigung der Röhren zu vermeiden UV = 1; while (time) { Delay1s(1); // 1sek warten time--; // timer erniedrigen if (start) { // Wenn ncohmal start gedrückt wird, wird der Vorgang abgebrochen time = 0; } output(time); // und ausgeben } UV = 0; // UV-Röhren ausschalten } LED = 0; // LED wieder ausschalten } } // Ende while } // Ende main
Natürlich wäre es toll wenn jetzt einer sagen könnte/würde "In Zeile xy ist der Fehler, es muss blablub heißen", aber natürlich bin ich überJEGLICHEN Tipp wie ich den Fehler finden kann dankbar (Da ich nciht den leisesten schimmer habe wie man an ein solches Problem rangeht).
Vielen dank für alle Tipps die ich (hoffentlich) bekommen werden
NovitA
PS: Ich bitte es zu entschuldigen wenn obiger Code kompletter Mist ist![]()







Zitieren
Lesezeichen