Sterrenhemel

Dit topic is gesloten

Arco

Special Member

Het is geen baseline processor (dat is de 12F/16C familie), dus dat gaat zeker niet werken. Ik zal nog eens kijken if ik iets zie.
(het is nogal een complex gedoe met al die scripts. Voor iedere familie zijn er verschillende scripts voor read/write/eeprom/erase,...)
Probeer deze maar eens (write script aangepast, de oudere pic writes zijn 8 bytes, de nieuwe 32 bytes in een block):

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Bavelt

Golden Member

Nee, De Pickit komt meteen met "No Device Selected" wanneer ik deze 18857 kies.

En dee PIC is idd family '14'?

Het blijft een beetje grappig dat wanneer je kiest voor family 2, waar hij weliswaar niet in thuishoort, de Pickit een eind komt in het starten en dat je zelfs de PIC kunt erasen..

Hebben de gekozen parameters (Project settings) hier wellicht nog invloed op?

Fouten zijn het bewijs dat je het probeert..
Arco

Special Member

Het erase script kan voor nieuwe pics nog hetzelfde zijn maar het program (write) script is dat zeker niet, daar is het nodige veranderd...

Nee, De Pickit komt meteen met "No Device Selected" wanneer ik deze 18857 kies.

Je bedoelt waarschijnlijk "No device detected"?

[Bericht gewijzigd door Arco op woensdag 13 januari 2021 19:28:52 (35%)

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Bavelt

Golden Member

Ja, inderdaad. "No Device Detected".
Tikfoutje.. :>

De melding komt ook metéén, dus niet eerst wat LED-knipperen en delay wat je ziet bij het detecteren van een bestaande PIC...

Fouten zijn het bewijs dat je het probeert..
Bavelt

Golden Member

Ik lees uit diverse topics her en der dat dit item eigenlijk wel vaker voorkwam: een PIC die niet is bijgewerkt in de PK2DeviceFile.dat..
En dan is er wel eens iemand die dan een nieuwe .dat aanlevert. Maar veel topics zijn al jaren oud.

Betkent dit niet het uitsterven van deze Pickit3 stand alone?

Of zijn er (werkbare) alternatieven (behouden MPLAB IPE)...?

Fouten zijn het bewijs dat je het probeert..
Arco

Special Member

Ligt eraan welke cpu's je wilt gebruiken. Voor kleintjes als de 18857 kun je de boel makkelijk aanpassen, grotere is wat lastiger.
Het programma voor de Pickit3 is gebaseerd op het programma van de Pickit2, en die was beperkt in zijn geheugen.
Tevens is de firmware niet geschikt voor heel grote en complexe pics, omdat de structuur van de .dat file daar niet is op bedacht...

Er is in het begin een speciaal voor de pickit3 ontwikkelde versie geweest, maar die was om te huilen zo slecht. (niemand gebruikt die meer)
Er is alternatieve software als Pickit Plus, maar die is ook nog lang niet compleet, er ontbreken nog veel cpu's.
Een ander alternatief is de Pickit4 of de Pickit Snap, maar veel positiefs hoor je daar ook nog niet over...

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Bavelt

Golden Member

Voor kleintjes als de 18857 kun je de boel makkelijk aanpassen, grotere is wat lastiger.

Nou ja..makkelijk. Die 18857 heb ik nog niet aan de praat in PicKit...

Fouten zijn het bewijs dat je het probeert..
Bavelt

Golden Member

Hoe simpel kan een programma zijn:

Deze heb ik gemaakt als test voor de 18857. Dan maar met de MPLAB IPE geprogrammeerd.

Ik dacht dat het werkte. Maar het ledje blijft knipperen. M.a,w: de PIC reset na de eerste de beste instructie lijkt het.

pic basic code:


Program Test18857

main:


ANSELA = 0
TRISA = 0

LATA.7 = 1
delay_Ms(1000)
LATA.7 = 0

While true Wend

end.
Fouten zijn het bewijs dat je het probeert..
Bavelt

Golden Member

Ik heb wat lopen spelen met project settings. Niks lijkt te helpen.

Het is gewoon mijn dag niet denk ik... :(

Fouten zijn het bewijs dat je het probeert..
Bavelt

Golden Member

Ik heb het testje wat uitgebreid:

pic basic code:


Program Test18857
Dim y1 as Byte

 main:


ANSELA = 0
TRISA = 0
Lata.7 = 0
LATA.2 = 1
Delay_Ms(250)
LATA.2 = 0
Delay_Ms(250)

while true
 For y1 = 0 to 10
   lata.7 = 1
   Delay_ms(500)
   lata.7 = 0
   Delay_ms(500)
   lata.7 = 1
   Delay_ms(500)
   lata.7 = 0
   lata.7 = 1
   Delay_ms(500)
   lata.7 = 0
   Delay_ms(500)
   lata.7 = 1
   Delay_ms(500)
   lata.7 = 0
 Next y1

Wend

Ik kan nu zien dat enkele instructies tussen de While en Wend nog worden uitgevoerd, maar na de tweede keer dat LAtA.7 hoog wordt, de PIC opnieuw opstart...

[Bericht gewijzigd door Bavelt op donderdag 14 januari 2021 00:40:58 (22%)

Fouten zijn het bewijs dat je het probeert..
Bavelt

Golden Member

Het lijkt nog anders te liggen:
De PIC reboot niet na x instructies, maar na ca 2-3 seconden.

Zou er een kans zijn dat 'iets' (timer-achtigs) dat ding na een bepaalde tijd opnieuw laat starten?

Fouten zijn het bewijs dat je het probeert..
Arco

Special Member

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Bavelt

Golden Member

Nee, had ik uitgezet.
Wat een vervelend probleem...Zo kan ik geen programma meer maken met deze PIC.. ;(

Dit zijn de settings:

Fouten zijn het bewijs dat je het probeert..
Arco

Special Member

Watchdog timeout zou qua tijd wel kloppen (is ~2.11 sec)
MCLR staat ook aan, zit daar wel een pull-up aan?

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Bavelt

Golden Member

Ja, 10K naar de +5V

Maar WDT staat toch op disabled?

Fouten zijn het bewijs dat je het probeert..
Arco

Special Member

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Bavelt

Golden Member

Ik grossier nu toch echt in gekke dingen, hoor.

De 'reset' blijkt een 'halve reset'.

In onderstaand programma (mag de naam amper hebben)

pic basic code:

main:


ANSELA = 0
TRISA = 0
Lata.7 = 0
LATA.2 = 1
Delay_Ms(1000)
LATA.2 = 0
while true

   lata.7 = 1
   Delay_ms(200)
   lata.7 = 0
   Delay_ms(400)
   lata.7 = 1
   Delay_ms(600)
   lata.7 = 0
   Delay_ms(800)
   lata.7 = 1
   Delay_ms(1200)
   lata.7 = 0
   Delay_ms(1400)
   lata.7 = 1
   Delay_ms(1600)
   lata.7 = 0
   Delay_ms(1800)


Wend

end.

Het Begint met lata.2 = 1 (in mijn geval oranje LEd)
Na 1 sec weer uit. Werkt.

Dan komt de While - Wend loop.

Na de 4e keer oplichten van de LEd aan LATA.7 zie je dat hij 'eventjes' oplicht, en begint dan weer van voren af aan... in de While-Wend loop (!).

(Een echte restart zou LATA.2 weer hoog moeten maken voor 1 sec), etc.

Nu snap ik het echt niet meer..

Fouten zijn het bewijs dat je het probeert..
Bavelt

Golden Member

En nu doet-ie het wel...

pic basic code:

main:


ANSELA = 0
TRISA = 0
Lata.7 = 0
LATA.2 = 1
Delay_Ms(1000)
LATA.2 = 0

While True

for y1 = 0 to 9
  Delay_Ms(1000)
  lata.7 = 1
  Lata.2 = 0
  Delay_Ms(1000)
  lata.7 = 0
  Lata.2 = 1
next y1

for y1 = 0 to 9
  Delay_Ms(500)
  lata.7 = 1
  Lata.2 = 0
  Delay_Ms(500)
  lata.7 = 0
  Lata.2 = 1
next y1

for y1 = 0 to 9
  Delay_Ms(250)
  lata.7 = 1
  Lata.2 = 0
  Delay_Ms(250)
  lata.7 = 0
  Lata.2 = 1
next y1

for y1 = 0 to 9
  Delay_Ms(50)
  lata.7 = 1
  Lata.2 = 0
  Delay_Ms(50)
  lata.7 = 0
  Lata.2 = 1
next y1


for y1 = 0 to 9
  Delay_Ms(25)
  lata.7 = 1
  Lata.2 = 0
  Delay_Ms(25)
  lata.7 = 0
  Lata.2 = 1
next y1

Wend

end.

Geen idee waarom het nu wel werkt. Misschien moest de PIC even worden ingebrand. Of wennen aan de kamertemperatuur. Of het oosten van het land..
Laat ik het daar maar even op houden... :? :D

Fouten zijn het bewijs dat je het probeert..
Bavelt

Golden Member

Nu ik de PIC16F18857 aan de praat heb, is het zaak om langzaam de functies uit het programma met de PIC16F1847 over te hevelen naar deze.

Nu worstel ik met het SPI-gebeuren.
Ik gebruik SPI2)
(volgens de Datasheet is dat RB1 voor SCK2 en RB2 voor SDI2).

In het programma gebruik ik:

pic basic code:


Dim SCKPin        As sbit at PORTB.1         'pin 22  SCK - Spi2I
    SDOPin        As sbit at PORTB.2          'pin 23  SDO - Spi2I

Verder SPI2_Init() en SPI2_Write() voor het schrijven naar de matrixen.

Maar toch doe ik iets verkeerd. (Alle leds op de matrixen branden).

Heb ik toch iets niet goed gedaan met de pinnen?
Je kan ze 'remappen' begreep ik al, maar ik dacht dat bovenstaande default waren.

(Ik zie wel dat men hier SDI als term gebruikt ipv SDO zoals bij de 1847)

Fouten zijn het bewijs dat je het probeert..
Arco

Special Member

SDI (of MISO) pin heeft een standaard mapping, de SDO (of MOSI) pin niet, die 'hangt los'...
Moet je met de PPS aan de gewenste pin knopen...

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Bavelt

Golden Member

Op 14 januari 2021 15:39:37 schreef Arco:
SDI (of MISO) pin heeft een standaard mapping, de SDO (of MOSI) pin niet, die 'hangt los'...
Moet je met de PPS aan de gewenste pin knopen...

OK, maar in dit geval is het dus een SDI, die default op RB2 zit volgens de datasheet...

Fouten zijn het bewijs dat je het probeert..
Bavelt

Golden Member

Fouten zijn het bewijs dat je het probeert..
Bavelt

Golden Member

Wat verderop hebben ze het wel weer over SDO..

[Bericht gewijzigd door Bavelt op donderdag 14 januari 2021 16:00:52 (13%)

Fouten zijn het bewijs dat je het probeert..
Bavelt

Golden Member

Stel dat ik die SDI (of SDO) wil verhuizen van RB2 naar RB3, hoe doe ik dat dan?

Fouten zijn het bewijs dat je het probeert..
Arco

Special Member

SDI en SDO zijn twee verschillende dingen: SDI is een input, en SDO is een output van de SPI bus...
SDO valt niks aan te verhuizen, want die zit als gezegd default nergens aan vast. Die moet je met PPS verbinden.
SDO1 naar Latb.7 bijv. is:

pic basic code:


RB7PPS = 0x15

In MikroBasic wordt dat:

pic basic code:


Unlock_IOLOCK()
PPS_Mapping(_RB7, _OUTPUT, _SDO1)
Lock_IOLOCK()

[Bericht gewijzigd door Arco op donderdag 14 januari 2021 16:51:39 (17%)

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com

Dit topic is gesloten