Sida 1 av 3

PIC18f4550 timing problem / MikroC

Postat: 17 oktober 2009, 19:06:58
av [ALV]
Jag labbar lite med min PIC18F4550.

Problemet jag har nu är att jag inte kan pulsa med delay_ms(1000) och få en seckund långa pulser exempelvis.

En sec motsvarar ungefär 20 sec med denna kod:

Kod: Markera allt

void main() {
	TRISD.F2 = 0;
	PORTD.F2 = 0;
	while(1) {
		PORTD.F2 = 1;
		Delay_ms(1000);
		PORTD.F2 = 0;
		Delay_ms(1000);
	}
}
Körs på
PIC18f4550
4mhz kristall

Någon som har förslag på hur jag kan lösa detta?

Det enda jag kan tänka mig är att det skulle vara bra med en Vref koppling men jag är osäker på om det skulle fixa biffen.

Re: PIC18f4550 timing problem / MikroC

Postat: 17 oktober 2009, 19:15:41
av victor_passe
Kan det vara så att MicroC tror att du har igång PLL men du har det inte?
Har du skrivit 4MHz där nere till vänster i programmet?

Re: PIC18f4550 timing problem / MikroC

Postat: 17 oktober 2009, 19:25:34
av [ALV]
Kan det vara så att MicroC tror att du har igång PLL men du har det inte?
Vet inte vad PLL är, MikroC:s dokumentation gav inte mycket info om det häller.
Har du skrivit 4MHz där nere till vänster i programmet?
Ja, 004.000000

Däremot har jag inte satt några Device flags när jag skapade projektet i MikroC, dvs standard inställningarna.

Re: PIC18f4550 timing problem / MikroC

Postat: 17 oktober 2009, 19:51:32
av Kaggen
> Däremot har jag inte satt några Device flags när jag skapade projektet i MikroC,

Skäms! :doh:

Hittade detta på Google, lustigt nog samma processor... notera bilden i nedersta svaret.

http://www.electro-tech-online.com/micr ... oblem.html

Re: PIC18f4550 timing problem / MikroC

Postat: 17 oktober 2009, 20:32:21
av sodjan
> Vet inte vad PLL är...

RTFM. En sökning på ett par sekunder i databladet hade gett
dig svaret, snabbare än tiden det tog att skriva inlägget.

> , MikroC:s dokumentation gav inte mycket info om det häller.

RT *right* FM...

> pulsa med delay_ms(1000) och få en seckund långa pulser exempelvis.

Helt fel metod. Använd timers och timer-interrupt.

> 4mhz kristall

*milli* Herz ?

> Däremot har jag inte satt några Device flags när jag skapade projektet i MikroC,

Gör det. Vad är problemet ? CONFIG ska gås igenom och *varje* option/bit
ska sättas så som *du* vill ha det i just ditt fall. Att strunta i det är att lämna
allt lite för mycket till slumpen. Detta är tydligt och komplett beskrivet i databladet.

Re: PIC18f4550 timing problem / MikroC

Postat: 17 oktober 2009, 21:25:25
av [ALV]
Hittade detta på Google, lustigt nog samma processor... notera bilden i nedersta svaret.

http://www.electro-tech-online.com/micr ... oblem.html
Stort tack!, nu fick jag en liten aning om vad pll är.
RT *right* FM...
Point taken :P
Helt fel metod. Använd timers och timer-interrupt.
Hey, im new to this.
Har du några förslag om var jag kan läsa mig till dessa mest enkla saker?
manualen är bra om man förstår den :P
> 4mhz kristall

*milli* Herz ?
4MHz för att vara petig.
Gör det. Vad är problemet ? CONFIG ska gås igenom och *varje* option/bit
ska sättas så som *du* vill ha det i just ditt fall. Att strunta i det är att lämna
allt lite för mycket till slumpen. Detta är tydligt och komplett beskrivet i databladet.
Absolut, problemet är kanske att jag inte har kommit så långt att jag har en susning om vart jag ska börja.
ja kan läsa möjligheterna och manualen och koppla ett och ett men ofta räcker det inte.

Sodjan:
Är det möjligt att få lite konstruktiv kritik med?
Typ hur fasen ska man tolka sida 289 i databladet för PIC18f4550 ?

btw så är jag välldigt nöjd med min wisp, klämde in senaste firmware nyligen utan problem.

Re: PIC18f4550 timing problem / MikroC

Postat: 17 oktober 2009, 21:34:29
av sodjan
> Är det möjligt att få lite konstruktiv kritik med?

Självklart, kom bara med lite konstruktiva frågor. :-)

> Typ hur fasen ska man tolka sida 289 i databladet för PIC18f4550 ?

Du menar sidan med "CONFIG2L: CONFIGURATION REGISTER 2 LOW" ?

Tolka *vad* på den sidan ? Det är ju bara beskrivningar av de olika CONFIG
bitarna i just det registret (CONFIG2L). Väldigt svårt att kommentera ytterligare
om du inte kan tala om vad som är oklart.

Re: PIC18f4550 timing problem / MikroC

Postat: 17 oktober 2009, 22:00:23
av [ALV]
typ, vad gör dem, vad används de till?

någon av dem jag behöver sätta för att få PIC:en att springa på 4MHz? och var/hur isf?

Re: PIC18f4550 timing problem / MikroC

Postat: 18 oktober 2009, 01:01:14
av sodjan
> vad gör dem, vad används de till?

Som sagt, det står på sidan. Du måste vara mycket mer tydlig och specifik
i dina frågor, inte bara svepande svepande frågor som inte går att svara på.
Ge ett exempel på något som är oklart så tar vi det.

> någon av dem jag behöver sätta för att få PIC:en att springa på 4MHz?

Nej. Vad skulle det vara ? Tittar vi på samma sida ? Den med "CONFIG2L" ?
Där hittar jag bara inställningar för "USB Internal Voltage Regulator",
"Brown-out Reset" och "Power-up Timer". Inget av det har med oscillator
inställningar att göra.

Re: PIC18f4550 timing problem / MikroC

Postat: 18 oktober 2009, 01:07:36
av Kaggen
Tyvärr måste jag vara lika tråkig som alla andra och hänvisa till det berömda databladet. Det finns ingen som enkelt kan säga till dig direkt vilka config-bitar som skall vara satta eller inte. Ingen kan memorera alla möjliga kombinationer speciellt inte i de nya uC där det finns ett antal att välja på. Skulle möjligtvis vara om man precis hållit på med just denna uC. Bitarna för oscillatorn finns förklarade i kapitlet för oscillatorn (börjar på sidan 25). Om jag skulle börja med denna processor skulle även jag behöva sätta mig ner och studera databladet ett par timmar (och jag kanske vågar säga att även sodjan och icecap troligtvis skulle ägna en stund med datablad om dom börjar använda en ny uC).

Du gör det inte heller lätt för dig genom att börja med en av de mer avancerade PIC:arna om du är relativt grön på detta, men du kanske tänkt använda USB i något projekt?

Nu använder du ju MikroC, så jag vet inte om MikroC sätter berörda config-bitar rätt om du anger önskad klockfrekvens och anger om du kör med intern eller extern oscillator/kristall/resonator. Det kanske någon som är slängd i MikroC kan svara på.

Config-bitar som normalt är viktigast (enligt mig då) är:

bitar för oscillator (krångliga i början, men läs på, skiljer mellan olika uC)
bit för MCLR (normalt av beroende på vad du har för programmerare)
bit för WDT (watch dog timer normalt av om man är nybörjare)

sedan har du massa olika protection bits på denna uC, dessa vågar jag inte rekommendera nånting om, läs på om dom. Övriga kan du testa ha i default-läge och modifiera varefter saker funkar/inte funkar. Hur bitarna är satta default ser du på sid 288 högersta kolumnen. Eventuellt kan du kanske hitta någon exempelkod hos microchip eller på nätet att börja med.

Re: PIC18f4550 timing problem / MikroC

Postat: 18 oktober 2009, 01:15:19
av sodjan
> och jag kanske vågar säga att även sodjan och icecap troligtvis skulle ägna en stund med datablad

Helt rätt. USB-modellerna är absolut inga nybörjarmodeller !
Även om man har pysslat med andra PIC innan, så tillför just USB delen
en hel del, speciellt i oscillatormodulen som är betydligt mer komplex i
USB-modellerna än i en mer "normal" PIC.

Sen så vet jag inte om ALV har hoppat direkt in i detta via MikroC, men
det gör det ju inte lättare. All exempelkod i databladet är i assembler så
kan man inte det (i alla fall skapligt) så...
Men men, om man gillar utmaningar så... :-)

Re: PIC18f4550 timing problem / MikroC

Postat: 18 oktober 2009, 15:09:36
av [ALV]
Config-bitar som normalt är viktigast (enligt mig då) är:

bitar för oscillator (krångliga i början, men läs på, skiljer mellan olika uC)
bit för MCLR (normalt av beroende på vad du har för programmerare)
bit för WDT (watch dog timer normalt av om man är nybörjare)
jo så långt har jag hängt med, osc bitarna är ju de svåra, jag fattar inte logiken i MikroC ang dessa dock.

Som ni sa, denna pic är helt klart inget för så gröna som mig men det ska väll inte vara omöjligt för det, speciellt inte med gurus här som hjälper till "bara man först har klurat ut hur de vill ha frågorna ställda :P"


I mikroC ser man config bitar som heter i stil med:
_FOSC_XT_XT_1H = $00F0 // Tror denna betyder, extern kristall för intern clock samt för usb externt. H1 biten vet jag inte vad den betyder.
_FOSC_XTPLL_XT_1H = $00F2 // Tror denna betyder sama sak dock att multiplicera den frekvens som externa kristallen ger.
...
Någon som kan kommentera om jag har fattat rätt?

Detta är taget från databladet sida 25:
1. XT Crystal/Resonator
2. XTPLL Crystal/Resonator with PLL enabled
3. HS High-Speed Crystal/Resonator
4. HSPLL High-Speed Crystal/Resonator
with PLL enabled
5. EC External Clock with FOSC/4 output
6. ECIO External Clock with I/O on RA6
7. ECPLL External Clock with PLL enabled
and FOSC/4 output on RA6
8. ECPIO External Clock with PLL enabled,
I/O on RA6
9. INTHS Internal Oscillator used as
microcontroller clock source, HS
Oscillator used as USB clock source
10. INTXT Internal Oscillator used as
microcontroller clock source, XT
Oscillator used as USB clock source
11. INTIO Internal Oscillator used as
microcontroller clock source, EC
Oscillator used as USB clock source,
digital I/O on RA6
12. INTCKO Internal Oscillator used as
microcontroller clock source, EC
Oscillator used as USB clock source,
FOSC/4 output on RA6

Någon som vet vad skillnaden mellan XT och HS är? min gissning är att det hanldar om kristall <= 4MHz så är det XT annars HS?


Jag har labbat runt med olika config bittar men utan framgång, ja ställde om MikroC till att köra 1MHz och då stämmer tiden för 1000ms men jag vill ju ha lite mer spetta än så.

Några tips på sidor som förklarar saker om detta? eller kanske någon som kan peka på någon sida i databladet som kan ge mig mer klarthet?
de som känns knöligast nu är nog att översätta de som står i databladet med XT,HS osv till de bitar jag kan sätta i MikroC för denna PIC. Några ider?

Re: PIC18f4550 timing problem / MikroC

Postat: 18 oktober 2009, 15:59:10
av bos
Skillnaden mellan LP/XT/HS verkar främst vara strömkonsumtionen. Saxat ur appnote 588 (AN588):
The LP oscillator
The LP, or low power oscillator, is designed to trade speed for low power operation. Although this circuit shares the same topology (schematic) as the XT oscillator, the transistors used in the LP oscillator have a higher Rdss value and draw considerably less current. This configuration is optimum for low frequency operation, because it trades the away unnecessary high frequency responses for dramatically reduced operating currents.

The XT oscillator
The XT oscillator is designed to give a compromise between high frequency performance and modest power consumption. The gain of this oscillator is as much as 15 times higher than the LP oscillator. This middle range will be used for frequencies up to 4 MHz.

The HS oscillator
The HS oscillator is designed to give the maximum gain and frequency response. The current consumption is accordingly higher. The gain is roughly five times higher than that of the XT oscillator. This gives the PICmicro the ability to operate at frequencies up to 20 MHz.

Re: PIC18f4550 timing problem / MikroC

Postat: 18 oktober 2009, 16:01:49
av sodjan
> Någon som vet vad skillnaden mellan XT och HS är? min gissning är att det hanldar om kristall <= 4MHz så är det XT annars HS?

Korrekt.

> ja ställde om MikroC till att köra 1MHz

Ställde du även in *processorn* att köra på 1 MHz ?
Det du gör i MikroC påverkar inte processorn alls, du bara talar
om för MikroC vilken hastighet du *tänker* köra på så att MikroC
kan generera korrekta wait-rutiner. MikroC har naturtligstvis inte
en aning om om du sedan kör på 1 Mhz eller något helt annat...

> eller kanske någon som kan peka på någon sida i databladet

Kapitlet "Oscillator".

> _FOSC_XT_XT_1H = $00F0 //

Jag antar att det finns ett antal sådana där konstanter. Sedan får du kombinera
de som ger just din önskade konfiguration. Du ska normalt t.ex bara välja en
av de som har med oscillatorn att göra t.ex.

Re: PIC18f4550 timing problem / MikroC

Postat: 18 oktober 2009, 16:21:01
av [ALV]
> ja ställde om MikroC till att köra 1MHz

Ställde du även in *processorn* att köra på 1 MHz ?
Det du gör i MikroC påverkar inte processorn alls, du bara talar
om för MikroC vilken hastighet du *tänker* köra på så att MikroC
kan generera korrekta wait-rutiner. MikroC har naturtligstvis inte
en aning om om du sedan kör på 1 Mhz eller något helt annat...
Det har jag ingen aning om, det enda jag gjort är att ändra i MikroC, är det någon config bit som ska sättas för detta med?
Kanke är någon som kan MikroC som kan tipsa isf.
> _FOSC_XT_XT_1H = $00F0 //

Jag antar att det finns ett antal sådana där konstanter. Sedan får du kombinera
de som ger just din önskade konfiguration. Du ska normalt t.ex bara välja en
av de som har med oscillatorn att göra t.ex.
Kanke en MikroC fråga men är det bara config under _CONFIG1H $300001 som jag ska hålla mig till en configuration?
dvs det finns CONFIG1L, CONFIG2L, CONFIG2H mm nämner PLL, OSC osv