SkalTura
In the beginning there was nothing, but even that exploded
Ben ik weer, met waarschijnlijk weer een stomme fout...
Ik heb een 18F14K22 met een snelle pulse output voor een project die ik simuleer met Proteus. Dat werkte prima, dus het PICje geprorammeerd en op een breadboardje geplaatst.
Maar je raad het al... Daar doet ie niks.
Device 18F14K22
Config_Start
FOSC = ERC
PLLEN = On
PCLKEN = OFF
FCMEN = OFF
IESO = OFF
PWRTEN = OFF
BOREN = OFF
BORV = 30
WDTEN = OFF
WDTPS = 64
MCLRE = OFF
HFOFST = OFF
STVREN = OFF
LVP = Off
BBSIZ = OFF
XINST = Off
Cp0 = OFF
CP1 = OFF
CPB = OFF
CPD = OFF
WRT0 = OFF
WRT1 = OFF
WRTB = OFF
WRTC = OFF
WRTD = OFF
EBTR0 = OFF
EBTR1 = OFF
EBTRB = OFF
Config_End
Xtal 64
All_Digital TRUE
OSCCON = %01100010
OSCTUNE.6 = 1
TRISB = %00000000
TRISC = %00000011
Symbol STARTBUT = PORTC.0
Symbol STOPBUT = PORTC.1
Symbol PWRLED = PORTC.4
Symbol RDYLED = PORTC.5
Symbol PULS = PORTB.7
Dim A As Word
Dim B As Word
B = 5
DelayMS 500
High PWRLED
' --- Standby mode ---
standby:
Toggle RDYLED
DelayMS 250
If STARTBUT = 0 Then
GoTo safetyloop
EndIf
GoTo standby
' --- Safety loop of 5 seconds before running ---
safetyloop:
For A = 0 To 50
If STOPBUT = 0 Then
GoTo endloop
EndIf
Toggle RDYLED
DelayMS 100
Next A
High RDYLED
GoTo pulseloop
' --- Pulse loop ---
pulseloop:
If STOPBUT = 0 Then
GoTo endloop
EndIf
Toggle PULS
For A = 1 To B
DelayUS 1
Next A
GoTo pulseloop
' --- Stop ---
endloop:
Low PULS
GoTo standby
End
Simpel start en stop knopje als input via een pullup weerstand aan de 5V. Knopje zet de poort laag bij indrukken.
Ik heb er een extra LED tussen gezet (PWRLED) die aan moet gaan op het moment dat de PIC spanning krijgt, zoals te zien is in het programma, maar zelfs dat doet ie al niet, en in Proteus wel.
Er hangt een oscillator aan van 64MHz.
Ik doe uiteraard iets enorm fout, maar zie zo niet wat...
Iemand een idee ?
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Voor inputs gebruik je PORTx, maar voor outputs moet je LATx gebruiken... (maar dat zal het probleem niet zijn)
Oscillator van 64MHz kan niet, met PLL_ON krijg je dan 256MHz!
De simulator zal wel geen rekening houden met de fysieke (snelheids)beperkingen van de MCU, da's aan de programmeur... 
SkalTura
In the beginning there was nothing, but even that exploded
Op 31 december 2016 15:56:32 schreef Arco:
Oscillator van 64MHz kan niet, met PLL_ON krijg je dan 256MHz!
Ik had juist met PLLEN op OFF problemen met de simulatie. Daarom had ik die op ON gezet.
Dus als ik een externe oscillator gebruik en ik 64MHz wil gebruiken moet ik PLLEN toch gewoon op OFF zetten ?
Gaan we proberen...
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Ik weet niet of de externe oscillator direct op 64MHz kan. Meestal gebruikt men 16MHz plus de PLL. (geeft ook een stuk minder EMC uitstraling)
SkalTura
In the beginning there was nothing, but even that exploded
Gelukkig nieuwjaar allemaal...
Ik denk dat ik gek geworden ben...
Heb LATx gebruikt ipv Portx, en PLL veranderd, maar nog steeds niks.
Ik gebruik mijn oude JDM programmer voor de 18F14K22 omdat de Wisp648 deze niet ondersteund (krijg ik elk geval een fout dat de target niet compatible is).
Om even snel te testen of de programmer nog lekker werkt even snel een 16F628A met een knipperend LEDje geprobeerd, maar ook dat deed niks.
Breadboard gaar ? Dus de LED rechtsteeks aan de PIC gesoldeerd en 2 draadjes voor de spanning... Helaas.
Andere 16F geprobeerd met de JDM, niks.
16F met de Wisp geprogrammeerd, niks.
Ander breadboard, niks.
LEDje is goed, werkt.
Andere PSU geprobeerd (allebij gewoon werkend), niks.
Er gaat ergens iets hopeloos fout, maar ik ben nu totaal de kluts krijt waarom zelfs een simpele 16F al niet meer werkt ??
Even om mijn geestelijke gesteldheid gerust te stellen. Het programma zou normaal gesproken nu goed moeten zijn ?
Of moet ik als ik een external osc van 16 eraan hang de XTAL ook op 16 zetten ?
Device 18F14K22
Config_Start
FOSC = HS
PLLEN = OFF
PCLKEN = OFF
FCMEN = OFF
IESO = OFF
PWRTEN = OFF
BOREN = OFF
BORV = 30
WDTEN = OFF
WDTPS = 64
MCLRE = OFF
HFOFST = OFF
STVREN = OFF
LVP = Off
BBSIZ = OFF
XINST = Off
Cp0 = OFF
CP1 = OFF
CPB = OFF
CPD = OFF
WRT0 = OFF
WRT1 = OFF
WRTB = OFF
WRTC = OFF
WRTD = OFF
EBTR0 = OFF
EBTR1 = OFF
EBTRB = OFF
Config_End
Xtal 64
All_Digital TRUE
OSCCON = %01100010
OSCTUNE.6 = 1
PORTB = %00000000
PORTC = %00000011
LATB = %00000000
LATC = %00000011
Symbol STARTBUT = PORTC.0 ' START button
Symbol STOPBUT = PORTC.1 ' STOP button
Symbol PWRLED = LATC.4 ' Power LED
Symbol RDYLED = LATC.5 ' Ready LED / Status LED
Symbol PULS = LATB.7 ' Pulse output
Dim A As Word
Dim B As Word
B = 5
DelayMS 500
High PWRLED
' --- Standby mode ---
standby:
Toggle RDYLED
DelayMS 250
If STARTBUT = 0 Then
GoTo safetyloop
EndIf
GoTo standby
' --- Safety loop of 5 seconds before running ---
safetyloop:
For A = 0 To 50
If STOPBUT = 0 Then
GoTo endloop
EndIf
Toggle RDYLED
DelayMS 100
Next A
High RDYLED
GoTo pulseloop
' --- Pulse loop ---
pulseloop:
If STOPBUT = 0 Then
GoTo endloop
EndIf
Toggle PULS
For A = 1 To B
DelayUS 1
Next A
GoTo pulseloop
' --- Stop ---
endloop:
Low PULS
GoTo standby
End
Ik kan je maar beperkt helpen op het moment.. Maar mijn Config die ik gebruik voor 64mHz met de INTERNE osc.
Xtal = 64 ' = 16 mhz interne OSC * 4 PLL
Config_Start
FOSC = IRC ;HS ; Internal RC oscillator
PLLEN = On ; PLL is under software control
PCLKEN = OFF ; Primary clock is under software control
FCMEN = OFF ; Fail-Safe Clock Monitor disabled
IESO = Off ; Oscillator Switchover mode enabled
PWRTEN = Off ; PWRT enabled
BOREN = Off ; Brown-out Reset enabled and controlled by software (SBOREN is enabled)
BORV = 30 ; VBOR set to 2.2 V nominal
WDTEN = OFF ; WDT is controlled by SWDTEN bit of the WDTCON register
WDTPS = 64
MCLRE = OFF ; RE3 input pin enabled; MCLR disabled
HFOFST = On ; The system clock is held off until the HF-INTOSC is stable.
STVREN = Off ; Stack full/underflow will cause Reset
LVP = Off ; Single-Supply ICSP enabled
BBSIZ = OFF ; 1kW boot block size
XINST = Off ; Instruction set extension and Indexed Addressing mode enabled
Cp0 = Off ; Block 0 code-protected
CP1 = Off ; Block 1 (002000-003FFFh) code-protected
CPB = Off ; Boot block (000000-0007FFh) code-protected
CPD = Off ; Data EEPROM code-protected
WRT0 = OFF ; Block 0 (000800-001FFFh) not write-protected
WRT1 = OFF ; Block 1 (002000-003FFFh) not write-protected
WRTB = OFF ; Boot block (000000-0007FFh) not write-protected
WRTC = OFF ; Configuration registers (300000-3000FFh) not write-protected
WRTD = OFF ; Data EEPROM not write-protected
EBTR0 = OFF ; Block 0 (000800-001FFFh) not protected from table reads executed in other blocks
EBTR1 = OFF ; Block 1 (002000-003FFFh) not protected from table reads executed in other blocks
EBTRB = OFF ; Boot block (000000-0007FFh) not protected from table reads executed in other blocks
Config_End
' 76543210
OSCCON = %01110000 ' 16MHz, Internal oscillator ' Bit 1 en 0 moeten allebei op 0 staan om PPL te KUNNEN activeren.
OSCTUNE.6 = 1 ' Daadwerkelijk PLL ActiverenArco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
@TS: In je code staat de clocksource op 8MHz (*4) interne oscillator, dus kristal eraan hangen is zinloos dan.
Instellen van PORTB/C is ook zinloos, omdat LATB/C dat weer overschrijft. (ik zou de datasheet toch eens goed doorlezen)
XTAL moet ingesteld op de frequentie na de PLL, dus in dit geval 32MHz.
SkalTura
In the beginning there was nothing, but even that exploded
Heb alles nog een keer nagelopen...
De JDM programmer, mijn breadboard en power supply zijn toch gewoon goed. Allemaal getest met een 16F628A.
Geen garantie natuurlijk dat de JDM programmer ook goed werkt met de 18F, maar daar moeten we maar even vanuit gaan, zolang de Wisp de 18F14K22 niet ondersteund.
Op 1 januari 2017 10:17:32 schreef diebobo:
Ik kan je maar beperkt helpen op het moment.. Maar mijn Config die ik gebruik voor 64mHz met de INTERNE osc.
Dat heb ik nu ook geprobeerd, om de externe clock even weg te laten, maar dat maakt niks uit.
Het lijkt wel of het programma gewoon niet start ?
SkalTura
In the beginning there was nothing, but even that exploded
Ik heb dit programma er nu in geladen.
Een simpel knipperend LEDje op C4 en een LED die meteen aan gaat (om te testen of de PIC überhaupt iets doet) op C5.
Device 18F14K22
Config_Start
FOSC = IRC
PLLEN = On
PCLKEN = OFF
FCMEN = OFF
IESO = OFF
PWRTEN = OFF
BOREN = OFF
BORV = 30
WDTEN = OFF
WDTPS = 64
MCLRE = OFF
HFOFST = On
STVREN = OFF
LVP = Off
BBSIZ = OFF
XINST = Off
Cp0 = OFF
CP1 = OFF
CPB = OFF
CPD = OFF
WRT0 = OFF
WRT1 = OFF
WRTB = OFF
WRTC = OFF
WRTD = OFF
EBTR0 = OFF
EBTR1 = OFF
EBTRB = OFF
Config_End
Xtal 64
All_Digital TRUE
OSCCON = %01110000
OSCTUNE.6 = 1
LATC = %00000000
High LATC.5
DelayMS 500
loop:
Toggle LATC.4
DelayMS 250
GoTo loop
EndResultaat:
C5 is aan, verder gebeurd er niks...
Normaal als de kloksnelheid niet goed staat werkt het wel maar kloppen de delays niet.
Maar kijk eens naar je OSSCON en kijk dan eens naar de datasheet. Je hebt m nu ingesteld op 8mHz. Ook met PLL actief wordt dat geen 64mHz, die zal je dus op zijn minst op 16 moeten zetten. Daarnaast zeg je dat je een extern crystal hebt aangesloten maar je FOSC staat op IRC en dat is de Interne Osc dacht ik..
Ook heb ik in mijn opmerkingen dit gezet : ' 16MHz, Internal oscillator ' Bit 1 en 0 moeten allebei op 0 staan om PPL te KUNNEN activeren. .. Dat zal ik destijds niet voor niks hebben gedaan. Bij jou staat deze op 10 en niet op 00.
SkalTura
In the beginning there was nothing, but even that exploded
Op 2 januari 2017 10:41:42 schreef diebobo:
Daarnaast zeg je dat je een extern crystal hebt aangesloten maar je FOSC staat op IRC en dat is de Interne Osc dacht ik..
Ik heb die nu in mijn test programmatje inderdaad op interne clock gezet om te kijken of er überhaupt iets gebeurd... Dan kan ik de externe oscillator uitsluiten in mijn test setup.
SkalTura
In the beginning there was nothing, but even that exploded
Op 2 januari 2017 11:00:48 schreef Sine:
Moet dat ding zo snel zijn ?
Met al die delays er in vermoed ik van niet.
Nogmaals, dit is een test programma, omdat het originele programma niet wilde werken.
In het originele programma zit ik met microseconden en hoge frequenties op een output.
hadv
Just find out what you like and let it kill you
Je moet in ieder geval altijd de Fosc goed configureren.
Dus voor een externe oscillator EC, voor een kristal/resonator HS en voor de interne klok INTRC. (een oscillator is niet hetzelfde als een kristal/resonator).
OSCCON, bits 4-6, en OSCTUNE hebben alleen betekenis voor INTRC.
PLLEN heeft betrekking op alles, maar de chip kan niet sneller dan 64 MHz. PLLEN werkt bij INTRC alleen op een interne klok van 8 of 16 MHz.
Als je de oscillator configureert op INTRC lijkt het me verstandig dat je er geen externe oscillator of kristal/resonator aan hangt.
Tenslotte, hopelijk overbodig, XTAL wordt door de compiler gebruikt voor tijdsafhankelijke berekeningen, zoals delays en de UART.
SkalTura
In the beginning there was nothing, but even that exploded
Op 2 januari 2017 13:07:31 schreef hadv:
Als je de oscillator configureert op INTRC lijkt het me verstandig dat je er geen externe oscillator of kristal/resonator aan hangt.
Ik heb nu in mijn test setup alleen de 18F en 2 LEDjes (met weerstand uiteraard). En dan het korte test programma.
1 LEDje meteen aan, en de andere knipperen.
Maar zelf dat lijkt al niet te werken, dus er zit meer fout in het programma.
Iets in de config over het hoofd gezien misschien ?
Heb je al iets veranderd aan je programma ? Ikzelf en hadv hebben al aangegeven dat zoiets je het nu ingesteld hebt in ieder geval niet goed is.
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Volgens mij moet deze hexfile werken. (kan niet proberen, heb geen k22 controllers). MB source:
program LED_Blinking
Symbol PWRLED = LATC.4
Symbol RDYLED = LATC.5
main:
TRISC = 0
LATC = 0
PWRLED = 1
OSCCON = %01100010
OSCTUNE = %01000000
while TRUE
RDYLED = 1
Delay_ms(500)
RDYLED = 0
Delay_ms(500)
wend
end.
SkalTura
In the beginning there was nothing, but even that exploded
Op 2 januari 2017 14:39:36 schreef Arco:
Volgens mij moet deze hexfile werken. (kan niet proberen, heb geen k22 controllers). MB source:
Werkt wel, maar niet zoals verwacht.
Net als bij mijn eigen programma is de ene LED gewoon aan.
De andere LED knippert inderdaad met jouw programma wel, maar veel te langzaam. Lijkt op halve snelheid of misschien zelf 1/4 snelheid te knipperen.
Heb overigens het test programma aangepast aan de hand van de config van "diebobo", maar blijft het zelfde resultaat.
Lijkt alsof er na de eerste delay van 500ms niks meer gebeurd.
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Knipper tempo is niet zo belangrijk (zal wel iets in de clocksetting verkeerd staan), het gaat erom dat alles nu wel werkt...
SkalTura
In the beginning there was nothing, but even that exploded
Op 2 januari 2017 13:58:01 schreef diebobo:
Heb je al iets veranderd aan je programma ? Ikzelf en hadv hebben al aangegeven dat zoiets je het nu ingesteld hebt in ieder geval niet goed is.
Ik heb nu de config het zelfde als bij jouw code, maar resultaat blijft het zelfde.
Als aangegeven in andere post, lijkt alsof er na de eerste delay niks meer gebeurd, of dat het command "delayms" ervoor zorgt dat het programma stopt.
Ik heb de delay van 500ms eruit gehaald, zodat het programma meteen naar Toggle LATC.4 gaat, en dan gaat inderdaad de 2e LED ook aan.
Maar verder gebeurd er dus niks omdat er dan weer een delay komt.
Erg raar.
Heb met diverse PICje gewerkt (alleen 10F, 12F en 16F) en nooit problemen gehad.
Deze verzet zich daarentegen behoorlijk...
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Clock stond verkeerd, aangepast.
[edit]
Heb je de interne oscillator wel op 8MHz staan? Moet volgens datasheet als PLL aan staat:
PLLEN: Frequency Multiplier PLL bit
1 = PLL enabled (for HFINTOSC 8 MHz only)
0 = PLL disabled
[Bericht gewijzigd door Arco op (77%)]
Probeer onderstaande code eens.. Naast hetgeen ik eerder stuurde zit er hier ook nog het een en ander aan IO instellingen bij (ANSEL) in combinatie met je Test Led Stukje.. Dit zou toch echt moeten werken.
Device 18F14K22
Xtal = 64 ' = 16 mhz interne OSC * 4 PLL
Config_Start
FOSC = IRC ;HS ; Internal RC oscillator
PLLEN = On ; PLL is under software control
PCLKEN = OFF ; Primary clock is under software control
FCMEN = OFF ; Fail-Safe Clock Monitor disabled
IESO = Off ; Oscillator Switchover mode enabled
PWRTEN = Off ; PWRT enabled
BOREN = Off ; Brown-out Reset enabled and controlled by software (SBOREN is enabled)
BORV = 30 ; VBOR set to 2.2 V nominal
WDTEN = OFF ; WDT is controlled by SWDTEN bit of the WDTCON register
WDTPS = 64
MCLRE = OFF ; RE3 input pin enabled; MCLR disabled
HFOFST = On ; The system clock is held off until the HF-INTOSC is stable.
STVREN = Off ; Stack full/underflow will cause Reset
LVP = Off ; Single-Supply ICSP enabled
BBSIZ = OFF ; 1kW boot block size
XINST = Off ; Instruction set extension and Indexed Addressing mode enabled
Cp0 = Off ; Block 0 code-protected
CP1 = Off ; Block 1 (002000-003FFFh) code-protected
CPB = Off ; Boot block (000000-0007FFh) code-protected
CPD = Off ; Data EEPROM code-protected
WRT0 = OFF ; Block 0 (000800-001FFFh) not write-protected
WRT1 = OFF ; Block 1 (002000-003FFFh) not write-protected
WRTB = OFF ; Boot block (000000-0007FFh) not write-protected
WRTC = OFF ; Configuration registers (300000-3000FFh) not write-protected
WRTD = OFF ; Data EEPROM not write-protected
EBTR0 = OFF ; Block 0 (000800-001FFFh) not protected from table reads executed in other blocks
EBTR1 = OFF ; Block 1 (002000-003FFFh) not protected from table reads executed in other blocks
EBTRB = OFF ; Boot block (000000-0007FFh) not protected from table reads executed in other blocks
Config_End
' 76543210
OSCCON = %01110000 ' 16MHz, Internal oscillator ' Bit 1 en 0 moeten allebei op 0 staan om PPL te KUNNEN activeren.
OSCTUNE.6 = 1 ' Daadwerkelijk PLL Activeren
ANSEL = %00000000 ' Analoge kanalen instellen = 1, 0 = digitaal
ANSELH = %00000000 ' Idem
All_Digital TRUE ;Alle ingangen digitaal
; 76543210
PORTA = %00000000
PORTB = %00000000
PORTC = %00000000
TRISA = %00000000 ;
TRISB = %00000000 ;
TRISC = %00000000 ;
High LATC.5
DelayMS 500
loop:
Toggle LATC.4
DelayMS 250
GoTo loop
EndArco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Op 2 januari 2017 19:16:16 schreef Arco:
@diebobo: volgens datasheet mag interne osc. + PLL alleen op 8MHz (zie boven)
Wauw, bijzonder... Ik zie het staan, ik neem dat het een copy/paste is ? Nu is een "oh bij mij werkt het al 2 jaar" niet echt een goede graadmeter of iets mag of niet, maar toch het werkt al 2 jaar
.. Datasheet is tegenstrijdig : http://ww1.microchip.com/downloads/en/DeviceDoc/41365E.pdf
In de summary bovenaan staat :
• Precision 16 MHz Internal Oscillator Block:
- Factory calibrated to ± 1%
- Software selectable frequencies range of
31 kHz to 16 MHz
- 64 MHz performance available using PLL –
no external components required
Dat interpreteer ik een beetje als Interne Osc.
Verderop staat :
• A Phase Lock Loop (PLL) frequency multiplier,
available to both the high-speed crystal and internal
oscillator modes, which allows clock speeds of
up to 64 MHz. Used with the internal oscillator, the
PLL gives users a complete selection of clock
speeds, from 31 kHz to 32 MHz – all without using
an external crystal or clock circuit..
Dus weer 32mHz 
En in de OSCCTUNE Register staat :
bit 6 PLLEN: Frequency Multiplier PLL bit
1 = PLL enabled (for HFINTOSC 8 MHz and 16 MHz only)
0 = PLL disabled
Ik neem aan dat dit je Copy/Paste stukje was waar alleen 8 mHz stond ? Of ik lees het verkeerd maar met deze tekst zou het dan weer wel mogen toch ?
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Misschien heb ik hier een oudere datasheet en is het veranderd?...
[edit]
Ik zie dat ik de 'B' versie heb en jij de 'E'. Ik zal ook de nieuwe eens downloaden... 
[Bericht gewijzigd door Arco op (43%)]