hallo Ich habe der Pic 16f88 mit Assembler programmiert, ich habe eine Test-Platine mit 2 LED zusammengebaut, und ich möchte dass die zwei LED mit verschidene Frequenzen Bliken lassen, d.h ich muss der interne Oscillator umschalten, aber das klappt nicht, hat Jamend ein Idee? #include <P16F88.inc> LED equ 1 LED1 equ 0 Wait1 equ 0x25 Wait2 equ 0x26 Wait3 equ 0x27 Wait4 equ 0x28 org 0x0000 ;__CONFIG _CONFIG1, _CP_OFF & _CCP1_RB0 & _DEBUG_OFF & _WRT_PROTECT_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _MCLR_OFF & _PWRTE_ON & _WDT_OFF & _EXTRC_IO ;__CONFIG _CONFIG2, _IESO_OFF & _FCMEN_OFF bsf STATUS, RP0 bcf OSCTUNE, 0x00 ;bsf OSCCON, 1110110 MainInit bsf STATUS, RP0 bsf OSCCON, 1110110 ;Einstellung der erste Frequenz movlw 0x00 movwf ANSEL bcf TRISA, LED bcf STATUS, RP0 ;Bank 0 bsf PORTA, LED ;LED leuchtet call Warten ;zum Unterprogramm; bcf PORTA, LED ;LED leuchtet nicht call Warten ;zum Unterprogramm; bsf STATUS, RP0 bsf OSCCON, 0000111 ;Einstellung der zweite Frequenz bcf TRISA, LED1 bcf STATUS, RP0 ;Bank 0 bsf PORTA, LED1 ;LED leuchtet call Warten1 ;zum Unterprogramm; bcf PORTA, LED1 ;LED leuchtet nicht call Warten1 ;zum Unterprogramm; goto MainInit Warten ;Wartezeit initialisierung movlw 0x10 movwf Wait2 loop2 movlw 0x10 ;Wartezeit initialisierung movwf Wait1 loop decfsz Wait1,1 goto loop decfsz Wait2,1 goto loop2 retlw .0 Warten1 movlw 0x10 movwf Wait3 loop3 movlw 0x10 ;Wartezeit initialisierung movwf Wait4 loop4 decfsz Wait3,1 goto loop decfsz Wait4,1 goto loop2 retlw .0 end
Wie schnell sollen die LEDs blinken ? Ich wür dazu ned den Oszillator umschalten sondern einfach mit dem Prescaler vom Timer arbeiten oder mit 2 Timern ..... MFG Patrick
>der interne Oscillator und >_EXTRC_IO sind ziemlich widersprüchlich, oder? Ich hab hier kein DB, aber EXTRC steht im allgemeinen für eine externe Taktquelle. Grüße, Edson
> bsf OSCCON, 1110110 ;Einstellung der erste Frequenz
Diesen Befehl interpretierst du falsch. Damit kann nur auf ein einziges
Bit zugegriffen werden. In diesem Fall setzt du damit nur Bit0 des
Registers OSCCON auf logisch 1.
So wäre es richtig:
1 | movlw b'1110110' |
2 | movwf OSCCON |
Mit diesem Wert versuchst du allerdings auch das Bit IOFS zu setzen. Das geht zwar, bringt aber nichts. Dieses Bit wird vom Controller auf 1 gesetzt, sobald die Frequenz nach dem Umschalten wieder stabilisiert ist. Nach dem Schreiben von OSCCON könnte man folgende Zeilen einfügen, um den weiteren Programmablauf mit stabilem Takt fortzusetzen:
1 | WaitFrqStable
|
2 | btfss OSCCON, IOFS |
3 | goto WaitFrqStable |
Grüße, Edson
Alex Mühller wrote: > ich möchte der erste LED mit 31,25 kHz und der zweite mit 8 MHz blinken > lassen. Und es funktiert nicht weil die Led's wahrscheinlich immer leuchten vermute ich..... :)
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.