PIC16F1826 met HD44780 en PicBasic

Dan krijg ik een melding "The PICkit3 is in MPLAB mode, Use the tools menu to download an OS compatible with this application"....

Doe dat dan ook... :)   (Tools menu -> Download pickit Operating System)

Arco - "Simplicity is a prerequisite for reliability" - www.arcovox.com

De melding is weg, Ik kan dit programma wel aanroepen vanuit Proton IDE, maar dan moet je nog weer handmatig de betreffende HEX importeren.

En het werkte zo mooi in Proton IDE in combinatie met MPLAB X IPE...

Hoeft niet. Je kunt de knop "Auto import hex and write device" gebruiken. Iedere keer als de hexfile verandert wordt de pic automatisch opnieuw geprogrammeerd.
(als je op 'Write' drukt, wordt trouwens ook de file opnieuw geladen als die veranderd is)

Arco - "Simplicity is a prerequisite for reliability" - www.arcovox.com

Er lijkt nu werkelijk niets meer te werken.

Foutmelding vanuit .NET bij het starten van PicKit3

Wat een ellende....

Dan is er waarschijnlijk iets met je Windows versie aan de hand. (.NET niet geinstalleerd of niet up-to-date)
Ik heb de pickit2 en 3 programma's op tientallen pc's gezet (windows 2000/xp/vista/7/10), nog nooit een probleem gehad.

Arco - "Simplicity is a prerequisite for reliability" - www.arcovox.com

Gelukkig was ik zo verstandig om een volledige systeembackup inclusief windows te maken alvorens te beginnen aan het avontuur van de upgrade van MPLABX.
Die backup dus teruggezet. Ervan uitgaande dat alles weer is 'zoals het was'.
Nee dus.
Nu krijg ik de melding "The target circuit may require more power than the debug tool can provide".

Hardwarematg is er niets veranderd. Andere USB bus geprobeerd, externe voeding aangesloten. Helpt niks.
Ik denk dat ik maar beter afscheid kan nemen van die MPLABX, dat geeft teveel meldingen en 'fails'.

Dus dan maar PickKit3 geïnstalleerd zoals aangegeven door Arco en die werkt zonder rare meldingen.

Maar hoe gaat dat automatisch programmeren dan in zijn werk? Ik heb de knop Auto import Hex + Write Device gebruikt.
Maar moet ik dan Pickkit3 aanroepen vanuit de Proton Compiler? (via F10)?

Of moet dat misschien in de background draaien? Ik snap dat even niet.
Wat ik zoek is een PIC-programma aanpassen dat bij compileren direct zonder allerlei schermen de PIC programmeert.

Aanvulling op mijn vorige post:

Ik heb de MPLABX toch aan de praat gekregen. Het blijkt dat de PICKit3 programmer zelf ook kan worden geprogrammeerd. Die heeft blijkbaar een flash firmware aan boord of iets dergelijks.

Met het Pickit3 V3.10 programma is hij te programmeren naar 'MPLABX mode'. Dan wordt er van alles gedownload en de Programmer geflasht.
En nu werkt het weer 'zoals het was'...

Stand alone werkt een sruk makkelijker, hoef je die lompe mplabx troep ook niet op te starten...
Moet een kwestie van ontbrekend .NET framework zijn meestal. (er zijn er nogal wat; .NET 2, 3, 3.5, 4, 4.5)

Arco - "Simplicity is a prerequisite for reliability" - www.arcovox.com

Stand alone werkt een sruk makkelijker, hoef je die lompe mplabx troep ook niet op te starten...

Maar hoe gaat dat automatisch programmeren dan in zijn werk? Ik heb de knop Auto import Hex + Write Device gebruikt.
Maar moet ik dan Pickit3 V3.10 aanroepen vanuit de Proton Compiler?

Of moet dat misschien in de background draaien? Ik snap dat even niet.

Iedere keer als de hexfile verandert, wordt die geladen en geprogrammeerd.
Programma laat je gewoon draaien. (daar kun je ook nog zien wat er gebeurt...)

Arco - "Simplicity is a prerequisite for reliability" - www.arcovox.com

Heb ik aan de praat. Veel makkelijker dan ik dacht. En het is bovendien nog veel sneller ook!
Er wordt niet zoals in MPLAB X een 'command line mode' gestart. Daarnaast ook geen gedoe met Voltages.

De wereld ziet er alweer een stuk beter uit dan gisterenavond!

.

Nog een klein issue-tje:
Na Reboot van de PC moet ik in PicKit v3.10 eerst Progammer - Read Device doen. Anders doet hij niks.

Dat kan niet bij opstarten automatisch?

Na opstarten moet je File -> Load doen (je kunt ook een hexfile daar uit de 'history' kiezen, de laatste gebruikte files)
Of auto import hex + write file kiezen en de juiste hex instellen.
Ikzelf gebruik altijd de 'Write' toets voor programmeren, die doet ook een auto-reload (behalve bij opstarten)

Je kunt altijd het PC programma zelf aanpassen, de sourcecode is vrij beschikbaar... :)

Arco - "Simplicity is a prerequisite for reliability" - www.arcovox.com

Dat klopt wel, maar bij het starten van PicKit is alles blanco en moet ik eerst van alles instellen; de VDD Pickit3 Target, de spanning, De Auto-Import (of laatste file). En dan begint het te lopen.

Hij onthoudt dus deze dingen niet bij de volgende start.

En na reboot van de PC is het nog 1 niveautje lager: dan moet ik eerst "Read Device" doen anders is alles 'disabled' in Pickit3.

VDD hoef je niet in te stellen, staat default op 'auto'
Als je pic eigen voedingsspanning heeft wordt die gebruikt voor programmeren, anders levert de pickit die.
Spanning wordt automatisch ingesteld afhankelijk van het type pic dat wordt gedetecteerd.

Aan de screenshot te zien heb je 'm op handmatig staan, dat is meer werk.
('Programmer' -> 'Manual device select' moet uit staan)

[Bericht gewijzigd door Arco op 5 oktober 2019 14:19:55 (21%)]

Arco - "Simplicity is a prerequisite for reliability" - www.arcovox.com

En nu na alle installatie-werk weer terug naar het oorspronkelijke probleem: het kunnen lezen van de tijd uit een DS3231 met PicBasic.

Ik heb even in het MikroBasic programma gekeken, Arco.
Ik zie dat daar ook een vorm van I2CRead (of I2Cin) wordt gebruikt.

De syntax hiervan in PicBasic is

I2Cin Dpin, Cpin, Control, { Address }, [ Variable {, Variable…} ]

(Blijkbaar hoeft hierbij het adres van de DS3131 '0x68') niet te worden opgegeven)

In PicBasic zou het dan zoiets worden: (De teller heb ik erbij gezet om te zien of het programma wel loopt)

pic basic code:

 I2Cin Dpin, Cpin, Control, { Address }, [ Variable {, Variable…} ]  
DIM Teller AS BYTE
Teller = 1
WHILE 1=1
     INC Teller
     I2CIN SDA, SCL, $D0, $00, [RTCSec, RTCMin, RTCHour, RTCDay, RTCDate, RTCMonth, RTCYear, RTCCtrl]
     CLS
     PRINT AT 1,1, "Sec: ", HEX RTCSec 
     PRINT AT 2,1, "Tel: ", HEX Teller     
     DELAYMS 1000
WEND 

Maar helaas nog geen resultaat terug.

Adres moet je altijd opgeven, anders ga je nooit antwoord krijgen...
Die I2Cin/Out functies zijn zo te zien geen 'echte', maar softwarematige implementaties. (bitbangen)

Arco - "Simplicity is a prerequisite for reliability" - www.arcovox.com

Een DS3231 verwacht een WORD (16bits) als adres en geen byte.
Zie hieronder maar geen idee of de fout daar zit...

pic basic code:

 I2Cin Dpin, Cpin, Control, { Address }, [ Variable {, Variable…} ]  
DIM Teller AS BYTE
DIM adres AS WORD
Teller = 1
Adres = 0

WHILE 1=1
     INC Teller
     I2CIN SDA, SCL, $D0, Adres, [RTCSec, RTCMin, RTCHour, RTCDay, RTCDate, RTCMonth, RTCYear, RTCCtrl]
     CLS
     PRINT AT 1,1, "Sec: ", HEX RTCSec 
     PRINT AT 2,1, "Tel: ", HEX Teller     
     DELAYMS 1000
WEND 
LDmicro user.

De datasheet is heel verwarrend. Als je de plaatjes bekijkt is het adres maar 1 byte, terwijl er 'word' boven staat.
Lijkt me typisch een foutje (word adres zou ook zinloos zijn, 't ding heeft maar 18 registers...)

Arco - "Simplicity is a prerequisite for reliability" - www.arcovox.com

Het staat ook in de tekst... en ik ben bezig de datasheet uit te pluizen tegen dat mijn module binnenkomt.

LDmicro user.

't zou ook knap zijn om 16 bits in een i2c byte te krijgen... ;) (tekening toont duidelijk maar 1 byte)

Arco - "Simplicity is a prerequisite for reliability" - www.arcovox.com

MSSP adresregisters zijn 10 bits breed en worden verdeeld in 2bytes die door de slave moeten ontvangen worden.
Niet alle bits worden gebruik maar de slave moet 2 bytes ontvangen.
Hieronder de tekst van een 16F887 datasheet p.190

*/
In 10-bit address mode, two address bytes need to be
received by the slave. The five Most Significant bits
(MSb) of the first address byte specify if this is a 10-bit
address. The R/W bit (SSPSTAT register) must specify
a write so the slave device will receive the second
address byte. For a 10-bit address, the first byte would
equal ‘1111 0 A9 A8 0’, where A9 and A8 are the
two MSb’s of the address
*/

LDmicro user.

Een SLAVE adres bestaat in 7 en 10 bits, niet de interne registerpointer. (en de 3231 is gewoon een 7 bits adres, 10 bits zie je niet vaak)
10 bits address mode heeft dus betrekking op het slave adres.
(zie ook de i2c bijbel: https://www.nxp.com/docs/en/user-guide/UM10204.pdf )

[Bericht gewijzigd door Arco op 5 oktober 2019 23:22:25 (16%)]

Arco - "Simplicity is a prerequisite for reliability" - www.arcovox.com