Stránka 1 z 1

Oscilátor

Napsal: 06 pro 2010, 21:34
od plecharts
Zdravím, mám menší problém s PIC18F2550, konkrétně nastavení rychlosti. Nastavím vše na 20MHz oscilátor ale LEDky blikají jak splašené. Když přejdu zpět na interní oscilátor, vše bliká jak by mělo.

Napsal: 06 pro 2010, 22:12
od majsi
A v akom IDE to programujes? Ake kniznice pouzivas? Funkcia delay ktoru pouzivas bude najskor stale pouzivat defaultnu hodnotu oscilatora.

Napsal: 08 pro 2010, 19:32
od plecharts
Používám MPLAB IDE, knihovnu pic18f2550.h

Napsal: 08 pro 2010, 20:52
od iginoiii
a čo takto vložíť program? blikať môžte softwarovo, hardwarovo a bohvie ešte ako . Takže takto sa dá jedine veštiť. Aj keď ja s pic neviem(a nejeden tu na fóre by mohol napísať, že neviem ani s atmelom :) ), ale každopádne dotaz je zle položený.

Napsal: 09 pro 2010, 16:40
od plecharts

Kód: Vybrat vše

#include <p18f2550.h>
#include <delays.h>
#include "configuration.h"

//#pragma config FOSC = INTOSCIO_EC //Internal oscillator, port function on RA6, EC used by USB
//#pragma config WDT = OFF //Disable watchdog timer

#define LEDPin1  LATCbits.LATC0
#define LEDTris1 TRISCbits.TRISC0

#define LEDPin2  LATCbits.LATC1
#define LEDTris2 TRISCbits.TRISC1

void main()
{
   LEDTris1 = 0;//Set LED Pin data direction to OUTPUT
   LEDPin1 = 1;//Set LED Pin
   LEDTris2 = 0;//Set LED Pin data direction to OUTPUT
   LEDPin2 = 1;//Set LED Pin
   
   while(1)
   {
      LEDPin1 = ~LEDPin1;//Toggle LED Pin
      Delay10KTCYx(25);//Delay 250K cycles (1 second at 1MHz since each instruction takes 4 cycles)
      LEDPin2 = ~LEDPin1;//Toggle LED Pin
      Delay10KTCYx(25);//Delay 250K cycles (1 second at 1MHz since each instruction takes 4 cycles)
   }

}


soubor configuration.h není potřeba přikládat, jsou v něm jen configuration bits a ty upravuji manuálně v MPLAB

Napsal: 09 pro 2010, 16:54
od iginoiii
meníte niekde v kóde definovanie frekvenciu procesoru? u atmelov je to príkaz pred kniznicou delay(ako som spomínal, pic nepoznám, ale ta filozofia bude rovnaká, ako už spomínal majsi)

Kód: Vybrat vše

#define F_CPU 16E6 // 16 MHZ rychlost uPC
#include <util/delay.h>

Napsal: 09 pro 2010, 23:04
od majsi
Vies vobec co ma robit tato funkcia???
Delay10KTCYx(25);

caka 10000*25 instrukcnych cyklov. Inak povedane sa 250000 krat vykona instrukcia NOP. To znamena ze cim rychlejsi das oscilator tym kratsie sa tych 10000*25 instrukcnych cyklov vykona. Konkretne toto

Delay10KTCYx(25); trva 0,05sekundy

rata sa to asi takto
1 TCY = 1/Fosc/4 = 1/(20 000 000/4) = 0.000 000 2s = 0.2us
pre 2.5s = 2.5/0.000 000 2 = 12 500 000 TCY
takze pre delay dlhy 2.5 sekundy pouzijes pri 20 MHz
Delay10KTCYx(1250);

Napsal: 11 pro 2010, 19:29
od plecharts
Tak po vysvětlení funkce to funguje, ale je tu další problém, a to když chci připojit čip s bootloaderem k PC pomocí USB, PC rozpozná pouze že se něco připojilo, ale nechce dál spolupracovat. Ovladače mám (HID).