Hallo zusammen, bin gerade dabei einen PIC 18F2455 zu programmieren und mache meine ersten Versuche. Wollte daher einfach mal einen Port setzen und rücksetzen, also eine Art Blinklicht. Nun ist das Problem, dass der Takt hinten und vorne nicht stimmt. Habe von sprut den Bootloader5 mit einem Brenner5 und der Software P18 in den PIC geladen. Das hat soweit funktioniert. Nun habe ich folgendes kleines Testprogramm: #ORG 0x0800,0x5FFF // 0 - 0x7FF benötigt für Sprut-Bootloader void main() { setup_adc_ports(NO_ANALOGS|VSS_VDD); setup_adc(ADC_OFF|ADC_TAD_MUL_0); setup_spi(FALSE); setup_wdt(WDT_OFF); setup_timer_0(RTCC_INTERNAL|RTCC_DIV_2|RTCC_8_bit); setup_timer_1(T1_INTERNAL|T1_DIV_BY_1); setup_timer_2(T2_DISABLED,0,1); setup_timer_3(T3_DISABLED|T3_DIV_BY_1); setup_comparator(NC_NC_NC_NC); setup_vref(FALSE); enable_interrupts(INT_RTCC); enable_interrupts(GLOBAL); while(1) { OUTPUT_HIGH(PINB7); delay_ms(2000); OUTPUT_LOW(PINB7); delay_ms(2000); } } Mein Problem ist nun, dass der Takt am Port B 7 viel zu hoch ist, etwa im Bereich von 20kHz. Ich betreibe den PIC an einem Quarz mit 4 MHz. Die Einstellungen wie PLLDIV etc. habe ich auf Richtigkeit überprüft. Wo liegt mein Fehler? Danke im Voraus, Gruß Michael
Michael wrote:
> delay_ms(2000);
delay_ms() muss wissen, wie schnell der Mikrocontroller läuft. Wo wird
das definiert?
Und übrigens: Welcher Compiler und welche Libraries werden verwendet?
Und: Läuft das Ganze in MPLAB SIM korrekt?
Hallo Severino, die Geschwindigkeit ist über den Bootloader eigentlich vorgegeben. Habe den für 4 MHz verwendet. Oder liege ich da falsch? Als Compiler verwende ich den PCWH Version 3.219. Habe die PIC18F2455.h included. Den MPLAB SIM habe ich nicht, kann also nicht sagen ob es da korrekt funktionieren würde. Gruß Michael
sieht nach dem CCS C - Compiler aus. Da muss der Takt für das delay_ms(..) mit der folgenden Zeile vorgegeben werden (für einen 4 MHz Quarz): #use delay(clock=4000000) Welche Konfigurationen setzt denn der Bootloader? Kann es sein, dass vom Bootloader die PLL aktiviert wird? Oder hast Du die ConfigBits manuell vor dem Brennen des Bootloaders gesetzt? Gruß daniel+
Mist... zu spät. AAAAAAABER: Im Hauptprogramm (also in dem Programm, welches durch den Bootloader gebrannt geflasht wird) musst Du die #use delay - Zeile ebenfalls haben. Diese Zeile hat ja so direkt nichts mit den Config Bits zu tun sondern sagt dem Compiler nur, wie er die Funktion delay_ms zusammenfriemeln soll. Natürlich muss der dort angegebene Wert mit dem tatsächlich anliegenden Takt übereinstimmen, sonst passt es nicht. Ich vermute fast, dass der Compiler - wenn diese Zeile fehlt - einen default-Wert annimmt, welcher offensichtlich nicht Deinen 4 MHz entspricht. Aber schreib mal bitte was zu den Config-Bits des Bootloaders. Vielleicht liegt es ja doch an der PLL...
Michael wrote: > Den MPLAB SIM habe ich nicht, kann also nicht sagen ob es da korrekt > funktionieren würde. MPLAB SIM ist Bestandteil von Microchip's MPLAB und steht kostenlos auf www.microchip.com zum Download. PCWH sollte sich auch in MPLAB einbinden lassen. Aber in der Zwischenzeit hat Daniel P. ja konkretere Tipps geliefert.
Hallo, die Config-Bits des Bootloaders sind wie folgt: PLLDIV= 0, USBDIV=1, CPUDIV=00, FOSC=1111, IESO=1, FCMEN=1. Also CONFIG1L=0x20 und CONFIG1H=0xDF. Habe jetzt noch die Zeile #use delay(clock=4000000) im Hauptprogramm eingefügt, hat aber leider nichts genützt. Im Moment kommt sogar überhaupt kein Signal mehr an. Gruß Michael
Update Sorry für Doppelpost aber weiß nicht wie man editieren kann. Also es kommt wieder was an. Habe jetzt einen Takt von ziemlich genau 4 kHz am Ausgang. Habe jetzt den Bootloader entfernt und nur das Hauptprogramm in den PIC geladen. Erkenne aber noch keinen Zusammenhang zwischen der Ausgangsfrequenz und meinen Einstellungen. Gruß Michael
Vielleicht hilft Dir folgender Link weiter, oder ein anderer Artikel auf der verlinkten Web-Site: http://www.fernando-heitor.de/component/option,com_openwiki/Itemid,123/id,tutorials:ccs:kapitel_1/rev,1173018489/
Schau Dir mal das Blockdiagramm auf Seite 26 im Datasheet an. Die Takterzeugung der USB-PICs ist deutlich anders als bei den Modellen ohne USB. Da muss man schon etwas genauer hinschauen. Wenn Dein FOSC = 1111 ist, so wird der CPU-Takt - wenn ich das richtig interpretiere - aus dem USB-Takt abgeleitet. Mit CPUDIV = 00 erfolgt also eine Taktteilung um den Faktor 2. Im Endeffekt flitzt Dein CPU also mit 48MHz ;-) Kein Wunder, dass die Blinkfrequenz der LEDs dann nicht stimmt :-P Wenn Du den Takt nicht aus der USB-PLL ableiten lassen willst mußt Du den Oszillator auf XT einstellen. Viel Erfolg daniel
Danke für den Link, werde es mir anschaun. Dass die CPU mit 48MHz rennt ist absolut erwünscht, die muss nämlich später pro Sekunde 15.000 A/D-Wandlungen ausführen und die Ergebnisse über USB zum PC übertragen :-) Den Tipp mit der Umstellung probier ich morgen; jetzt ist erstmal Feierabend für heute. Danke schonmal allen die mir geholfen haben! Gruß Michael
Hallo, also die delay-Funktion funktioniert jetzt wie sie soll. Jetzt würde ich aber gerne die CPU nicht nur mit 4 MHz sondern mit 48 MHz laufen lassen. Wie kann ich die Register CONFIG1L und CONFIG1H beschreiben? Gruß Michael
Na schau doch einfach ins Datenblatt auf Seite 26 bzw. 290 FOSC0:FOSC3 muss 1111 sein (HS oscillator, PLL enabled (HSPLL)) Damit wird der CPU-Takt aus dem USB-Takt erzeugt. Wenn Du dann einen CPU-Takt von 48MHz haben willst, setzt Du CPUDIV auf 00 (Taktteilung um Faktor 2). Denk dann aber auch an die Zeile #use delay(clock=48000000) ...sonst blinken Deine LEDs wieder verkehrt ;-) Oder wie meintest Du das jetzt mit dem Beschreiben der Register??? CONFIG1L und CONFIG1H sind doch die Configurationswords (siehe S.288) und setzen sich aus FOSC0:FOSC3, CPUDIV, USBDIV usw. zusammen. Diese werden natürlich beim Brennen beschrieben. Gruß daniel
Hallo, das Problem ist, dass sich die Register CONFIG1L und CONFIG1H nicht so einfach beschreiben lassen, sie haben die Adressen 0x300000 bzw. 0x300001. Wenn ich die gewünschten Werte also an diese Adressen schreibe, so kann ich dem .lst-file entnehmen dass der Compiler irgendwelche x-beliebigen Register beschreibt, nicht aber die gewünschten. Die o.g. Adressen gibt es in Wirklichkeit ja auch garnicht. Weiß also nicht, wie ich diese richtig adressiere. Gruß Michael
DAS SIND KEINE REGISTER! Die kannst Du nicht einfach wie eine Variable im RAM setzen und lesen. Es ist auch höchstgradig riskant die Configurationsbits aus einem laufenden Programm heraus zu ändern. Daher werden die bits ja auch beim Brennen der Firmware gesetzt. Alternativ kannst Du die ConfigBits mit einer TableWrite-Operation - ähnlich wie beim Beschreiben des Programmspeichers - modifizieren. Davon rate ich aber ab. Gruß daniel
Ok danke, habe die Einstellungen jetzt beim Brennen vorgenommen und die CPU läuft mit 48 MHz. Ich wollte die Einstellungen ja nicht aus dem laufenden Programm heraus ändern, sondern nur am Beginn bei der Initialisierung. Aber wenn das so kompliziert ist...
Michael wrote: > Ich wollte die Einstellungen ja nicht aus dem > laufenden Programm heraus ändern, sondern nur am Beginn bei der > Initialisierung. Aber wenn das so kompliziert ist... Das macht keinen Sinn, da Du den PIC nach dem Ändern der ConfigurationsBits erst mindestens resetten müsstest (manche Änderungen, besonders an den Oszillatoreinstellungen werden teilweise erst nach einer vollständigen PowerDown / PowerUp - Sequenz wirksam). Ich verstehe auch nicht, was Du Dir davon versprichst!? Der Bootloader funktioniert doch mit den gleichen Takteinstellungen, oder nicht? Wenn Du nach einer Möglichkeit suchst, die interne PLL des PICs im Betrieb ein- bzw. auszuschalten, dann solltest Du Dir mal die PICs der J-Serie anschauen. Bei denen ist das per Software (und ohne nachfolgenden Reset) möglich. gruß daniel
Alles klar, dann macht das wohl tatsächlich keinen Sinn so. Habt bitte etwas Nachsicht; bin absolut neu auf dem Gebiet :-)
Kein Problem ;-) ...aber dann direkt an USB wagen... uiuiui... viel Glück ;-) Gruß Daniel P.S.: PICs werden in diesem Forum hier häufig belächelt. Auf www.fernando-heitor.de gibt es ein Forum, welches sich ausschließlich mit den PICs beschäftigt. Auch der CCS C Compiler ist dort recht verbreitet... Unter Umständen ist die Unterstützung bezüglich der PICs und des CCS Compilers dort ergiebiger.
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.