problema su int2 pic18f - BaroneRosso.it - Forum Modellismo

Torna indietro   BaroneRosso.it - Forum Modellismo > Elettronica > Circuiti Elettronici


Rispondi
 
Strumenti discussione Visualizzazione
Vecchio 13 gennaio 10, 19:22   #1 (permalink)  Top
User
 
L'avatar di illez
 
Data registr.: 06-08-2007
Residenza: Empoli
Messaggi: 1.813
problema su int2 pic18f

Sarà che sono nel divano con la febbre da un paio di giorni e quindi non proprio lucidissimo ma non mi riesce di far andare questo benedetto interrupt come dico io (e come dice il datasheet, credo ).
Come da manuale (il pic in oggetto è il pic18f2455) :
l'int2 è un registro a 8 bit e viene incrementato alla frequenza di Fosc:4

Avendo io un quarzo a 4Mhz con PLL attivato ho un clock interno a 96Mhz che con la divisione minima per 2 porta ad un clock per il pic di 48Mhz.
Il timer2 viene quindi incrementato alla frequenza di 12Mhz (48:4, appunto), cioè ogni 0,0833 uSec.
Se imposto il prescaler a 16 si incrementa ogni 1,333 uSec

Il timer2 viene ad ogni ciclo confrontato con un registro di periodo: se sono uguali viene resettato il timer2 e generato un output di match verso il postscaler. Il postscaler non è altro che un contatore che ad una soglia prefissata (da 1 a 16) genera (finalmente!) l'interrupt.
Sembra complicato, ma non lo è.

Bene, detto tutto ciò e tornando alle mie impostazioni: l'incremento avviene ogni 1,333 uSec. Se imposto il registro di periodo a 124 ottengo un match ogni 166,6 uSec.
Se setto il postscaler a 6, ottengo finalmente un INT ogni millisecondo circa.

Giusto?

Sbagliato; facendo un semplice bip ogni 1000 interruzioni la frequenza ottenuta è molto più bassa, di circa 1/3.
PORCACCIA LA MISERIA, PERCHE???????

PS: per sicurezza, ho fatto una cosa simile con l'int0 e la frequenza è corretta...
__________________
.......
illez non è collegato   Rispondi citando
Vecchio 13 gennaio 10, 20:17   #2 (permalink)  Top
User
 
L'avatar di ElNonino
 
Data registr.: 06-05-2007
Residenza: Tre Ville (Preore)
Messaggi: 3.605
Invia un messaggio via MSN a ElNonino
Forse mi sfugge qualcosa ma come fai con un quarzo a 4 MHz avere un clock a 96 MHz ?

Vado a rivedermi i data-sheet del PIC ma mi pare che il PLL moltiplichi per 4 la frequenza dell' oscillatore, se sbaglio perdonami.

__________________
Peace & Love
Fate le cose nel modo più semplice possibile, ma senza semplificare. (A. Einstein)
ElNonino non è collegato   Rispondi citando
Vecchio 13 gennaio 10, 20:21   #3 (permalink)  Top
User
 
L'avatar di marcosinatti
 
Data registr.: 10-06-2007
Residenza: Sansepolcro (Ar)
Messaggi: 1.948
E' la stessa cosa che ho pensato io, la frequenza massima raggiungibile è 48mhz, ma adesso guardo meglio perchè non mi è molto chiaro.
marcosinatti non è collegato   Rispondi citando
Vecchio 13 gennaio 10, 20:28   #4 (permalink)  Top
User
 
L'avatar di illez
 
Data registr.: 06-08-2007
Residenza: Empoli
Messaggi: 1.813
Il discorso degli oscillatori è piuttosto complicato e non è detto che non mi sbagli.
Ma guardando a pag.26 del datasheet (la fig.2.1) si vede che il PLL genera 96Mhz obbligatoriamente con un input di 4 Mhz (fornito o con un quarzo da 4Mhz o con multipli e settando poi il PLL prescaler).
Da qui passa in due direzioni: obbligatoriamente attraverso un divisore per 2 per la parte USB e attraverso un PLL Postscaler (CPUDIV) che divide minimo per 2 il clock.
__________________
.......
illez non è collegato   Rispondi citando
Vecchio 13 gennaio 10, 20:33   #5 (permalink)  Top
User
 
L'avatar di marcosinatti
 
Data registr.: 10-06-2007
Residenza: Sansepolcro (Ar)
Messaggi: 1.948
Si in effetti i tuoi calcoli mi sembrano corretti, quindi a questo punto sembra dipendere da qualcosa sul timer.
marcosinatti non è collegato   Rispondi citando
Vecchio 14 gennaio 10, 09:28   #6 (permalink)  Top
User
 
L'avatar di illez
 
Data registr.: 06-08-2007
Residenza: Empoli
Messaggi: 1.813
Come sempre, aveva ragione lui

Vi spiego qual'erano le cause perché potreste cascarci anche voi.
Usando il PLL, per impostare il clock di sistema dovete impostare anche CPUDIV, 2 bit che dividono il clock per 2, 3, 4 oppure 6.
Nel CCS C la definizione, o meglio, i #fuses legati al CPUDIV possono trarre in inganno.
Trattandosi di fuses e non di define, non vedete immediatamente cosa state facendo .
Infatti il fuses CPUDIV2 non divide per 2 il clock come potrebbe sembrare. E analogamente CPUDIV4 non divide per 4.
Al contrario delle #define solite dove, per esempio, i prescaler vengono definiti con un nome che indica il valore della divisione, i fuses CPUDIVx indicano nella cifra il valore dei 2 bit che verranno impostati.
Quindi CPUDIV1 divide per 2, CPUDIV2 divide per 3 (e NON per 2), CPUDIV3 divide per 4 e CPUDIV4 divide per 6.
Dopo essere impazzito per qualche giorno ho scoperto questa cosa e risolto molti dei problemi; dopo le mille prove fatte per capire cosa succedeva, chiarita la causa mi son scordato nel codice un CPUDIV2 che, appunto, mi divideva il clock per 3, da cui l'errore del timer
Grazie a tutti!
__________________
.......
illez non è collegato   Rispondi citando
Vecchio 14 gennaio 10, 09:32   #7 (permalink)  Top
User
 
L'avatar di marcosinatti
 
Data registr.: 10-06-2007
Residenza: Sansepolcro (Ar)
Messaggi: 1.948
Son quelle cose che fanno inc...are come iene!
Grande! e grazie della spiegazione...
marcosinatti non è collegato   Rispondi citando
Vecchio 14 gennaio 10, 14:26   #8 (permalink)  Top
User
 
L'avatar di ElNonino
 
Data registr.: 06-05-2007
Residenza: Tre Ville (Preore)
Messaggi: 3.605
Invia un messaggio via MSN a ElNonino
Sono andato pure io a rivedermi il data-sheet, Illez hai ragione, ottima spiegazione la tua; controllerò come viene gestito nel C originale MC, se mi servirà mi avrai sicuramente fatto risparmiare tempo nel debug.

__________________
Peace & Love
Fate le cose nel modo più semplice possibile, ma senza semplificare. (A. Einstein)
ElNonino non è collegato   Rispondi citando
Vecchio 14 gennaio 10, 14:50   #9 (permalink)  Top
User
 
L'avatar di illez
 
Data registr.: 06-08-2007
Residenza: Empoli
Messaggi: 1.813
Dopo tanto divertimento con i PIC16, son passato a questo pic18f2455 perché voglio poterlo collegare via USB.
Ancora non ho provato, finora ho gestito la parte ricezione infrarossi e pilotaggio dei display (sto provando a realizzare un cronometro per automodelli con l'emettitore a infrarossi nella macchina). L'idea è quella di scaricare i tempi via USB sul PC e leggendo qua e la mi sembra di capire che la cosa migliore sia avere un quarzo a 4Mhz; con quello ho il clock per la USB e un notevole clock (48Mhz!) per la parte pic.
Vediamo se ci riesco
__________________
.......
illez non è collegato   Rispondi citando
Vecchio 14 gennaio 10, 21:55   #10 (permalink)  Top
User
 
L'avatar di marcosinatti
 
Data registr.: 10-06-2007
Residenza: Sansepolcro (Ar)
Messaggi: 1.948
La usb l'avevo usata con un pic18f2550, mi pare con un quarzo a 12Mhz, però in picbasic, usando microcodestudio c'è un tool che crea in automatico tutta la parte pic e Vb6 per farli comunicare.
marcosinatti non è collegato   Rispondi citando
Rispondi

Bookmarks




Regole di scrittura
Non puoi creare nuove discussioni
Non puoi rispondere alle discussioni
Non puoi inserire allegati
Non puoi modificare i tuoi messaggi

BB code è Attivato
Le faccine sono Attivato
Il codice [IMG] è Attivato
Il codice HTML è Disattivato
Trackbacks è Disattivato
Pingbacks è Disattivato
Refbacks è Disattivato


Discussioni simili
Discussione Autore discussione Forum Commenti Ultimo Commento
problema!!!!!!! gaetanux Elimodellismo Principianti 5 17 dicembre 09 09:05
problema erapox Aeromodellismo Principianti 0 21 aprile 08 19:10
Problema O.S 15 daltanius85 Aeromodellismo Principianti 3 26 marzo 08 11:28
problema os 32 marcolo Elimodellismo in Generale 6 22 ottobre 07 16:44
problema li-po alex92005 Batterie e Caricabatterie 0 04 dicembre 06 19:03



Tutti gli orari sono GMT +2. Adesso sono le 01:25.


Basato su: vBulletin versione 3.8.11
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
E' vietata la riproduzione, anche solo in parte, di contenuti e grafica. Copyright 1998/2019 - K-Bits P.I. 09395831002