mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik pic 16F88 interne oscillator


Autor: Sabine Mühller (zizo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Patrick Weinberger (seennoob)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Meister Eder (edson)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>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

Autor: Sabine Mühller (zizo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich möchte der erste LED mit 31,25 kHz und der zweite mit 8 MHz blinken 
lassen.

Autor: Meister Eder (edson)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>  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:
   movlw   b'1110110'
   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:
WaitFrqStable
   btfss   OSCCON, IOFS
      goto   WaitFrqStable

Grüße,
Edson

Autor: Daniel V. (volte)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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..... :)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.