Waters
Guus@Sint-Michielsgestel
Beste CO'ers,
Ik probeer al een dag een externe 10 MHz clock te delen
met behulp van een pic12F675.
De 675 loopt op de interne clock en volgens de datasheet
zou ie een 10MHz clock door kunnen laten.
Ik draai een simpele test, en pas na minuten krijg ik een
puls eruit, wie heeft dit eerder gezien.
Hier een stukje wat ik gevonden heb .
What does not work is using the one pin as a clock source for both the system oscillator and TIMER1 for the PIC12F675.
Using internal 4MHZ oscillator of the PIC12F675 and an external 10MHz oscillator to TIMER1 does work and measures the pulse width in the TIMER1 count register to +/- 0.1us.
[code="timer1 675 TEST"][/code]
Je kunt je programma hier ook in code tags invoegen
*knip*
[Bericht gewijzigd door Sine op vrijdag 3 april 2020 00:50:59 (94%)]
Waters
Guus@Sint-Michielsgestel
Sorry Sine, ik weet niet hoe ik code tags kan "invoeren"
Ik heb de versie gecorrigeerd, nu de nette uitvoering
Waters
Guus@Sint-Michielsgestel
Sine, zou je mijn rommelige versie willen verwijderen.
Bij voorbaat dank.
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Ik begrijp het niet erg. Wat probeer je te bereiken?
De interne osscillator is 4MHz, dus 10MHz gaat er nooit uitkomen. (hooguit fOsc / 4 = 1MHz)
Waters
Guus@Sint-Michielsgestel
Jawel, de 10MHz clock komt binnen op de externe ingang die rechtstreeks
Timer1 in kan.
kijk even in de laatste versie die ik gepost heb.
Die Sine bewerkt heeft is de zeer rommelige versie
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Wat ik in de datasheet zie: Timer1 werkt maar tot 2MHz zonder prescaler. Met prescaler wel hoger, maar je zet die nergens aan...
benleentje
Golden Member
Sorry Sine, ik weet niet hoe ik code tags kan "invoeren"
Dat staat gewoon boven je tekst invoer vak. Het is het symbool met de 2 rode <> tekens erin. Nadat je code hebt gekopieert en geplakt kan je het daarna selecteren en gebruik je dat symbool en kies je de gewenste opmaak in dit geval "PIC assembly"
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Precies, en je plakt het er gewoon als text in, dus je hoeft het niet te uploaden.
Waters
Guus@Sint-Michielsgestel
Benleentje en Arco bedankt,
Ik ben nu bezig met een 4MHz interne clock,
nog geen resultaat.
Zie de Basic file.
[Bericht gewijzigd door Waters op vrijdag 3 april 2020 10:01:50 (89%)]
Waters
Guus@Sint-Michielsgestel
'****************************************************************
'* Name : 10MHZ EXTERNAL CLOCK DIVIDER *
'* Author : [select VIEW...EDITOR OPTIONS] *
'* Notice : Copyright (c) 2020 [select VIEW...EDITOR OPTIONS] *
'* : All Rights Reserved *
'* Date : 02-04-2020 *
'* Version : 1.0 *
'* Notes : *
'* : *
'****************************************************************
; PIC12F675 : +--v--+
; +5V [ ] GND
; <[ ]< =
; <[ ]<
; (met externe 10k pull-up!) >[ ]> Portb.2 output 65 ms
; +-----+
Device 12F675 ;Er wordt een 12F675 8-pins PIC gebruikt
Config INTRC_OSC_CLKOUT, WDT_OFF, PWRTE_ON, MCLRE_OFF
XTAL = 4
CMCON = %00000111;
PORTB = %00000000;
TRISB = %00111010; B5 ingang 10 MHz, B1 ingang 1sec clock , B4 input A/D
INTCON = %11000000 ; Gie ON, GPIE ON
T1CON = %00000001 ; Timer1 = on ,
PIR1 = %00000000;
PIE1 = %00000001;
ANSEL = %00000000;;
OPTION_REG = %10000000
Dim TMR1F As PIR1.0
Dim TMR1E As PIE1.0
TMR1E = 1
DelayMS 1000
WACHT: ; Met een 1 MHz input , verwacht ik een
TMR1E = 1 ; 65.365 ms delay, dat klopt wel als ik tussen 1 en 5 minuten wacht.
While TMR1F = 0 ; wacht op flag
Wend
PORTB.2 = 1 ; flag geweest
DelayMS 1
PORTB.2 = 0
TMR1F = 0
INTCON = %11000000
GoTo WACHT
Anoniem
TMR1CS staat bij u op default, dus TMR1 telt Fosc/4 en niet T1CKI
.
Verder heeft Arco mooi voorgerekend dat zonder prescaler voor T1CKI de max freq 1MHz (Fosc/4) bedraagt, dit op voorwaarde dat duty 50% is
.
Dus begin het experimenteren met tellen van lage frequenties ...
Verder zie ik nog overbodige instructies die alleen maar vertragen en mis ik een ISR
Waters
Guus@Sint-Michielsgestel
Hoi CJ
Zelfs dit kleine stukje code draait niet.
Ik draai dan op de 1 MHz interne clock
Wat mis ik ?
WACHT: ; Met een 1 MHz input , verwacht ik een
TMR1E = 1 ; 65.365 ms delay,
While TMR1F = 0 ; wacht op flag
Wend
PORTB.2 = 1 ; flag geweest
DelayMS 1
PORTB.2 = 0
TMR1F = 0
INTCON = %11000000
GoTo WACHT
[Bericht gewijzigd door Sine op vrijdag 3 april 2020 16:19:35 (3%)]
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Weet je zeker dat RB2 niet hoog is geweest? (1mS is erg kort)
Waarom neem je zo'n trage pic als je met hoge frequenties wilt werken? (een nieuwe als de 12F1572 loopt op 32MHz en kost maar de helft...)
Neem voor testen met de 675 een lagere frequentie. (is gegarandeerd tot ~961kHz, niet tot 1 MHz, ik zou met 100 of 500kHz beginnen)
[Bericht gewijzigd door Arco op vrijdag 3 april 2020 13:29:05 (25%)]
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Nee,
Maar pollen zou (hoewel ongebruikelijk) ook moeten werken...
Interrupt enable moet dan wel uit staan.
[Bericht gewijzigd door Arco op vrijdag 3 april 2020 15:57:29 (24%)]
Waters
Guus@Sint-Michielsgestel
Arco,
Je hebt gelijk, ik moest TMR1E uitzetten om de puls te zien.
Dit is een klein stapje vooruit na een dag zwoegen
Kun je me aangeven hoe ik nu op interrupt basis kan werken ?
Dus nog met de 1MHz interne clock .
In mijn geval ON INTERRUPT GOTO WACHT
Anoniem
Maar pollen zou (hoewel ongebruikelijk) ook moeten werken...
Interrupt enable moet dan wel uit staan.
Je hebt gelijk, ik moest TMR1E uitzetten om de puls te zien.
Waarom? Omdat anders de controller op zoek gaat naar de ISR (die TS niet had)
GIE of PIE uitzetten zou in TS zijn geval hetzelfde resultaat hebben dan TMRE1 uitzetten?
Of heeft dat een andere reden? Wat weet of zie ik dan niet?
Waters
Guus@Sint-Michielsgestel
Ik heb het inmiddels werken met een 10 MHz externe input op B5
De processor loopt op de interne 4 MHz clock.
Ik kan nu pulsen opwekken om de 6.5 ms ( TIMER1 die rondloopt )
Er komt om de seconde ook een puls uit voor sync met de GPS
Deze loopt nog niet op tijd
[Bericht gewijzigd door Waters op vrijdag 3 april 2020 20:30:32 (16%)]
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Kun je me aangeven hoe ik nu op interrupt basis kan werken ?
Interrupt weer aanzetten... (en een interrupt routine maken)