Hallo zusammen. Ich will verschiedene PWM Signale mit einem PIC18F erzeugen. Aber wenn ich das Code auf mein PIC hochlade, dann kriege ich keine Signal raus.. mein Code sieht so aus: #include <p18f2525.h> #include <xc.h> #include <timers.h> #include <stdlib.h> void main(void) { unsigned char time = 0; TRISBbits.RB4 = 0; // Make the PORTB as Output LATB4 = 1; // Set PORTB HIGH /* Configure TIMER0 : * * Timer interrupt on * Set timer 16 bit * Source Edge HIGH-TO-LOW * Clock Source Intern * setting prescalar 256 */ OpenTimer0(TIMER_INT_ON & T0_16BIT & T0_EDGE_RISE & T0_SOURCE_INT & T0_PS_1_256); // Load starting value to the timer 0 WriteTimer0(0XE17B); // 1s // Reset Interrupt Flag INTCONbits.TMR0IF = 1; // Enable Global Interrupt ei(); while(1){ } //CloseTimer0(); return; } // Interrupt Service Routine void interrupt interruptTimer0Overflow(){ di(); // Disable Interrupt if(INTCONbits.INT0F == 1) // When TIMER0 Overflow { LATB4 = ~LATB4; INTCONbits.TMR0IF = 0; // Clear the TIMER0 Interrupt Flag WriteTimer0(0XE17B); // Load the timer Value } ei(); // Enable Interrupt }
ich hab mir den Code jetzt nicht genau angeschaut aber: 1. hast du die config Bits gesetzt? 2. du machst das mit der PWM etwas umständlich. 3. welchen Programmer benutzt du, bzw wie versorgst du den Chip mit Strom?
Axel schrieb. > 1. hast du die config Bits gesetzt? JA, also mit der Datei > 3. welchen Programmer benutzt du, bzw wie versorgst du den Chip mit Strom? Ich nutze MPLABX mit XC8 Compiler. Spannungsversorgung wir über dem ICD3
Tato schrieb: >> 1. hast du die config Bits gesetzt? > JA, also mit der Datei Wie kommt die Datei in dein Projekt? Warum ist es keine Source Datei *.c? Tato schrieb: > Spannungsversorgung wir über dem ICD3 Im Debug-Mode oder nur als Programmer?
// Interrupt Service Routine void interrupt interruptTimer0Overflow(){ di(); // Disable Interrupt if(INTCONbits.INT0F == 1) // When TIMER0 Overflow { LATB4 = ~LATB4; INTCONbits.TMR0IF = 0; // Clear the TIMER0 Interrupt Flag WriteTimer0(0XE17B); // Load the timer Value } ei(); // Enable Interrupt } Braucht man hier wirklich di und ei? War schon recht lange her aber ich meine der ei am ende könnte wieder ein Interrupt hereinlassen obwohl der jetzige gar nicht zu Ende gelaufen ist. Interruptfunktionen müssen ja den Kontext wieder herstellen. Wenn da noch ein Interrupt hereinkommt dann wird der Kontext irgendwann zerstört. Der retfi hat damals den interrupt wieder enabled. Ob das jetzt 16F oder 18F war weiß ich nicht mehr.
Volker S. schrieb: > Tato schrieb: >>> 1. hast du die config Bits gesetzt? >> JA, also mit der Datei > Wie kommt die Datei in dein Projekt? > Warum ist es keine Source Datei *.c? eine Header Datei passt eh. Du kann die fuse bits auch direkt in die Haupt C Datei kopieren. Oder hast du die Header-Datei richtig eingebunden? Hast du einen extern Oszilator/Quarz? Am Anfang würde ich einmal den internen Oszilator verwenden.
Axel H. schrieb: >> Wie kommt die Datei in dein Projekt? >> Warum ist es keine Source Datei *.c? > > eine Header Datei passt eh. > Du kann die fuse bits auch direkt in die Haupt C Datei kopieren. Oder > hast du die Header-Datei richtig eingebunden? > > Hast du einen extern Oszilator/Quarz? Ja ich habe ein extern Oszilator von 8MHz Die ganze Datei lade ich hier hoch
bist du sicher das der auch richtig schwingt? (mit Oszi überprüft) hast du mal die Versorgungsspannung nach gemessen? kannst du z.B. ein Led ohne Timer ansteuern?
:
Bearbeitet durch User
Axel schrieb: > 2. du machst das mit der PWM etwas umständlich. Das kann man wohl sagen! Für Erzeugung einer PWM braucht es keinen Interrupt. Vielleicht hilft dir das weiter: http://www.microchip.com/forums/download.axd?file=0;789451 Beispiel 12 Gruss
Tato schrieb: > Ich will verschiedene PWM Signale mit einem PIC18F erzeugen. Erich schrieb: > Axel schrieb: >> 2. du machst das mit der PWM etwas umständlich. > > Das kann man wohl sagen! > Für Erzeugung einer PWM braucht es keinen Interrupt. Für "verschiedene" ist das vieleicht dann doch nicht so verkehrt, wenn nur ein Timer dafür geeignet ist... Erich schrieb: > Vielleicht hilft dir das weiter: > http://www.microchip.com/forums/dow... > Beispiel 12 Vorsicht, das scheint eine eher ältere Version zu sein. Gibt an einigen Stellen Probleme mit aktuellen Versionen des XC8 Compilers. Irgendwo gab es auch überarbeitete. Wenn ich die finde... Axel H. schrieb: > ist du sicher das der auch richtig schwingt? Tato schrieb: > Ja.. ich habe einfach ein LED blinken lassen .. es hat funktion Einfach erst mal im Debug Mode bleiben. Da merkt man sofort, wenn was mit der Oszillator Konfiguration nicht stimmt, weil eine Fehlermeldung ausgegeben wird! Keine Ahnung, warum man überhaupt in den Programmer-Mode wechselt, bevor alles läuft ;-) Axel H. schrieb: > Volker S. schrieb: >> Tato schrieb: >>>> 1. hast du die config Bits gesetzt? >>> JA, also mit der Datei >> Wie kommt die Datei in dein Projekt? >> Warum ist es keine Source Datei *.c? > > eine Header Datei passt eh. Funktioniert schon, widerspricht aber dem Prinzip, dass nichts in eine Header Datei sollte, was "direkt" Programm- oder Daten-speicher belegt. (Definitionen von Funktionen, Variablen und eben auch Config-Bits)
:
Bearbeitet durch User
Volker S. schrieb: > Irgendwo gab es auch überarbeitete. Wenn ich die finde.. Ok, keine Ahnung mehr wo die neueste Version zu finden ist. War vermutlich auf Nicos Seite hier https://pic-projekte.de/blog/category/elektrotechnik/mikrocontroller/pic18-tutorial/ (Da gab es früher auch ein PIC-Forum) Einigermaßen aktuell dürfte auch die hier sein: http://www.hs-ulm.de/nocache/wir/Personal/PersonalSaSchr/vschilli/Mikrocontroller/allMCHP/ Erster Download oben, an der rechten Seite...
:
Bearbeitet durch User
Hier findest du etwas mehr.Auch Interrupts...: Beitrag "Matrix Tastatur (Matrixtastatur) mit 74HC4051 und 162A Display."
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.