ICSP-funderingar

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
Earendil
EF Sponsor
Inlägg: 448
Blev medlem: 2 juni 2004, 09:06:43
Ort: Lund

ICSP-funderingar

Inlägg av Earendil »

Jag håller på och konstruerar lite med PIC, SD-kort och så småningom en MP3-decoder från finska VLSI. Det ska alltså bli en enkel mp3-spelare.

Har kommit så långt nu att jag läser filer på SD-kortet, formaterat med FAT16. Coolt så mycket man kan göra med 1093 instruktioner! :-)

Nu kör jag med en PIC 16F688, klockat med intern oscillator på 8 MHz som jag programmerar med en PICKit från Microchip.

Nu vill jag byta upp mig till en större krets, ca 28 ben, den ska vara ytmonterad och jag vill kunna programmera den ICSP. Hela projektet går på ca 3.3 volt, eftersom det är det som både SD-kort och mp3-decoders vill ha. Vill gärna kunna använda wisp628 eftersom den verkar bra.

Nu behöver jag försöka reda ut lite grand om ICSP och relaterade frågor. Har läst en massa datablad och application notes från Microchip och andra ställen:

HVP och LVP: Verkar som om skillnaden mellan dessa är att HVP på en modern (flashbaserad) PIC-krets innebär att en högre spänning (>= 13 volt) på MCLR används för att signalera att kretsen ska programmeras. När den appliceras i rätt sekvens med Vdd så börjar PIC:en aldrig exekvera. Däremot används inte de 13-15 volten för att driva själva flashskrivningen och därför behövs inte mycket ström här. Det är väl så här wisp628 funkar?
LVP använder en separat pinne för att initiera programmeringen, där behövs ingen hög spänning (>13v). Verkar som om bara några få PIC:ar (18F...) klarar detta va?

Erase av programminne:
Det finns olika typer av erase. Bulk erase rensar typ allt (även OSCCAL och sånt), men verkar i vissa PIC:ar behöva högre spänning (>4.5 volt Vdd). Men räcker "vanlig" erase till för att bara radera/programmera programminnet?

En idé jag har är att jag kan mata själva PIC:en med 5 volt om det krävs under programmeringen och ta ner spänningen till 3.3 med en zenerdiod för resten av kretsen. Under programmeringen är ändå alla pinnarna på PIC:en high-impedance så det bör inte bli någon risk att resten av kretsen utsätts för 5 volt.

Enklast vore förstås att bara ge Wisp628:n separat 5 volts matning och fortsätta driva PIC, SD-kort och mp3-decoder med 3.3 volt. Förutsatt att PIC:en jag väljer kan radera erforderliga minnesareor vid 3.3 volt!

Många röriga frågor, men jag är tacksam för alla kommentarer! Kanske kan vi så småningom presentera en tydligare guide för detta. Microchips datablad är ofta bra, men lite knepiga vad rör ICSP tycker jag!
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

På "F" kretsar är den externa 13-volten bara en "signal".
Drivspänningen för programmeringen genereras sedan internt.

På "C" kretsarna drivs programmeringen externt.

Wisp628 programmerar bara "F" kretsar.

Många PIC16 och PIC18 stöder LVP, nackdelen är
att man dels förlorar en pinne, dels inte kan gör riktigt allt
som HVP kan (t.ex ställa om LVP flaggan i CONFIG'en...)

Bulk erase kräver 4.5 V på de flesta modeller.
"Vanlig erase" (från t.ex koden) erasar bara en mindre del av flash åt gången.
Se datablad och Prog Spec för detaljer...

Wisp628 använder bulk erase.

> Microchips datablad är ofta bra, men lite knepiga vad rör ICSP tycker jag!

Se även : http://www.embedinc.com/picprg/icsp.htm
Användarvisningsbild
Earendil
EF Sponsor
Inlägg: 448
Blev medlem: 2 juni 2004, 09:06:43
Ort: Lund

Inlägg av Earendil »

Tack för svaren!

Ok, om det alltid är Bulk Erase som används så får jag nog se till att min PIC kan köras på 5 volt och att man på något hyfsat enkelt sätt kan koppla bort resten av kretsen så den inte brinner upp av den högre spänningen! :shock:

En annan fråga, när jag ändå är igång. Det finns ju två sätt att inleda en ICSP-session; antingen sätter man Vpp hög först innan man applicerar Vdd, eller tvärtom. Det verkar som om enbart det senare går att använda med INTOSC i PIC:en. Hur gör Wisp628 med detta?
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Det har inget att göra med INTOSC.

Äldre PIC modeller använde generellt Vdd-before-Vpp, d.v.s att
matningsspänningen kunde vara ansluten hela tiden och att Vpp
kunde läggas till MCLR när som helst för att få över den i "prog-mode".

På många nyare modeller har man möjlighet att koppla bort
MCLR och använda pinnen som en ingång istället. På dessa kan
kan alltså programmeraren (t.ex Wisp628) inte hålla programmeraren
i "reset" via MCLR pinnen.

Problemet är att processorn inte får starta upp innan den går över i
prog-mode. När man har extern-MCLR är det inget problem eftersom
(t.ex) Wisp628 kan köra MCLR pinnen direkt från 0V -> Vpp.

Med intern-MCLR fungerar inte detta. Därför har nyare PICs en lösning
där man använder Vpp-before-Vdd. Dock, normalt sätt så är detta bara ett
krav i det fall att man faktiskt kör med intern-MCLR, man kan ju välja
att inte göra det...

Wisp628 tar ju normalt sin matning från målmiljön, och styr alltså
inte över Vdd. Dock finns det en liten "dongle" som Wisp628 styr
och som gör en kort kortslutning av Vdd just när Vpp sätts. Me denna
kan även t.ex 12F629/675 programmeras med internal-MCLR. Se även :
http://www.jescab.se/InternMCLR.html
Jag har kompletta komp-satser till dongeln för 50:-.

Dock verkar det finnas undantag. T.ex så har jag lyckats programmera
16F88 även med interal-MCLR...
Användarvisningsbild
Earendil
EF Sponsor
Inlägg: 448
Blev medlem: 2 juni 2004, 09:06:43
Ort: Lund

Inlägg av Earendil »

Tack för bra tips och synpunkter. Jag tror att jag börjar förstå det mesta av ICSP nu. Dock kvarstår mitt ursprungliga problem; mp3-decoder, SD-minne och LCD-display är alla 3 volts-prylar och jag vill gärna kunna driva med 3.3 volts batteri så småningom. Känns trist att behöva ha femtielva nivåomvandlare på kortet bara för att kunna köra PIC:en på 5 volt (som den egentligen inte behöver) för att kunna köra ICSP!

Fick en idé igår. Om man bara kopplar bort jord (Vss) från alla kringkretsar så borde det väl fungera? Om de PIC:en vid något tillfälle skulle exekvera och driva några utgångar till 5 volt så kan det väl inte skada en 3volt-krets om den inte har sin Vss kopplad?

Är jag ute och cyklar?
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Jo, ICSP i 3.x kretsar är lite av ett problem.
Men du behöver väl inte femtielva nivåomkoppplare ??
Du behöver bara se till att PIC'en kan matas med 5V
isolerast från övriga kretsen. T.ex men den "strapp"
eller diod eller något annat på Vdd och något liknande
på de två programmerings signalerna.

Övriga pinnar är hich-Z under hela programmeringen.

En annan sak som jag inte har kollat. De nya "J" modellerna
av PICs (som är 3.x V-only), kanske är lättare att använda.
Dock fungerar inte Wisp628 till dom, men däremot t.ex
PICkit 2 (från Microchip).
Användarvisningsbild
Earendil
EF Sponsor
Inlägg: 448
Blev medlem: 2 juni 2004, 09:06:43
Ort: Lund

Inlägg av Earendil »

Nivåomkopplarna skulle bara vara om man under exekvering skulle köra på 5 volt.
Visst är resten av pinnarna högimpediva, men eftersom Wispen inte driver kretsen
så måste man ju ha 5 volt på kretsen från början och det måste väl innebära att kretsen
kan komma att exekvera innan Wispen initierar programmeringsläget? Och i så fall
skulle man väl kunna få ut 5 volt på utgångarna?

Jag har faktiskt kollat lite på J-modellerna, de är kanske lämpligare att använda i det här
fallet då. Tack för tipset om PICKit2! Har fluktat lite snabbt på den, men det verkade
inte vid en snabb titt som om den stödde ICSP. Nu laddade jag ner manualen och såg
att den gör det.

Fantastiskt med internet. Att kunna få svar på den här typen av frågor en helgdag! 8)
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Visst, det är lite extra att tänka på vis ICSP och 3-volts matning.

Ett sätt är att lägga till en extra "strapp" som kollas
först i firmware (PIC'ens programvara), och om den är satt
till "run" kör man som vanligt, annars låter man bli att sätta
några pinnar så de "driver". Allt är ju High-Z från reset i alla fall.
Då kan man flytta strappen och lägga på 5V utan risk.
Användarvisningsbild
Earendil
EF Sponsor
Inlägg: 448
Blev medlem: 2 juni 2004, 09:06:43
Ort: Lund

Inlägg av Earendil »

Smart idé! Nu har jag lite tips för att komma vidare. Antingen blir det en Wisp628 med en strapp enligt din modell eller så blir det en PICKit2. Har kört med PICKit1 ett bra tag nu och är mycket nöjd med den, men den är ju lite begränsad vad gäller möjliga PIC:ar... Dessutom stöder den inte ICSP.

Trevlig helg!
Skriv svar