Hallo, ich habe mein erstes PIC-Programm (Steuerung einer Binäruhr) geschrieben, habe aber Probleme es zum HEX-File zu Compilieren. Geschrieben habe ich das Programm in C (hätte man wahrscheinlich viel kompakter schreiben können, aber ist wie gesagt mein erstes PIC-Programm). Beim Compilieren mit CC5X (student version) in MPLAB erhalte ich immer folgende Fehlermeldung: Error[1] C:\Programme\CC5X\16F872.H 3 : Duplicate chip definition (Multiple chip definitions detected (option -p<chip> and #include <header.h>).The #include statement should be removed) Wenn ich den Header "#include <16F872.H>" weglasse, dann kommen massenweise Fehler, dass die Eingänge und Ausgänge nicht definiert seien. Hab keine Ahnung ob irgendwas an meinem geschriebenen Programm falsch ist oder ob ich mit dem Compiler irgendwas falsch mache. Für Tipps wäre ich sehr Dankbar! Oli
Hallo oli, die Binärausgabe geht auch deutlich einfacher...... wie sieht denn die ".h" - Datei aus? Otto
> (Multiple chip definitions detected (option -p<chip> and #include ><header.h>).The #include statement should be removed) Dann steht bei "option -p<chip>" in MPLAB ein anderer Prozessor als 16F872 drin.
Nur mal so nebenbei, der Code wurde nicht für CC5x geschrieben. TRISA0 = 1; //unbekannt TRISA.0 = 1; // ist besser while(true) //unbekannt while(1) // ist besser RB2 = 0; //unbekannt PORTB.2 = 0; // ist besser Das zieht sich komplett durch den Code.
Oh achso, ich wusste nicht dass verschiedene Compiler auch verschiedenen Code benutzen. Habe mir verschiedene fertige Programme angeschaut und mir daraus den Code zur Ansteuerung der Ein- und Ausgänge zusammengereimt. Dann versuche ich mal, das Programm entsprechend zu ändern. Wo finde ich denn in MPLAB die "option -p<chip>"? Habe am Anfang bei 'Project Wizard' den Pictyp eingestellt.
So, habe das Programm jetzt nach den Vorschlägen von holger umgeschrieben, jetzt scheint das Compilieren (prinzipiell) zu funktionieren. Allerdings kommt nun folgende Meldung: Error[1] C:\Dokumente und Einstellungen\Oliver Pohl\Desktop\main.c 937 : Code size exceeded (FREE compiler limitation) So groß ist das Programm doch eigentlich nicht, dass es über die Grenze der Demoversion hinausgeht, oder? Kann man das irgendwie umgehen oder evtl. etwas Code einsparen?
lass den Müll weg : if(sekunde == 0) . . und schreib es so : PORTB = (sekunde & 0x3f); /* 0x3f = 0b111111 */ und entspreched für Minute und Stunde Wie hast du die Pins nummeriert ? RB0 --> RB7 oder RB1 --> RB8 ; in diesem Fall :PORTB = ((sekunde & 0x3f)<1); /* 0x3f = 0b111111 */
RA1 bis RA5 für Stunden, RB1 bis RB6 für Minuten und RC1 bis RC6 für Sekunden (Sind jeweils nur 6 LEDs, soll eine echte Binäruhr werden, nicht mit BCD's für jede Ziffer). Wäre das dann für die Minuten entsprechend PORTC = ((minute & 0x3f)<1); und für die Stunden PORTC = ((stunde & 0x3f)<1); ? Und diese 3 Zeilen bewirken genau das, was meine 500 Zeilen machen??
>und für die Stunden PORTC = ((stunde & 0x3f)<1); ? >Und diese 3 Zeilen bewirken genau das, was meine 500 Zeilen machen?? Nein, weil sie falsch sind :( PORTB &= 0x81; // PB1-PB6 auf 0 setzen, PB0 und PB7 beibehalten PORTB |= (sekunde << 1); // PB1-PB6 auf Sekundenwert setzen Damit spartst du dir alle "if(sekunde == wert)". Das machst du dann ähnlich für PORTC und PORTA.
Wunderbar, jetzt hat das Compilieren funktioniert, danke! Die Uhr läuft auch soweit, allerdings vieeeel zu schnell. Die Sekunden verticken so schnell, dass man die ersten LED-Stellen garnicht mehr blinken sieht. Was könnte ich denn falsch gemacht haben? Für den Takt habe ich einen Quarz mit 4,194304 Mhz benutzt.
Du musst die Zeit schon normieren... Praktisch ist da immer ein ms-Timer ;)
Wie normiere ich die denn? Kann ich nicht einfach über einen Befehl auf die Frequenz des Quarz zugreifen und die dann auf 1Hz runterteilen?
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.