Instabil Pic18F458

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
cyr
Inlägg: 2712
Blev medlem: 27 maj 2003, 16:02:39
Ort: linköping
Kontakt:

Inlägg av cyr »

Hmm, på bilden ser det ut som du bara kopplat in en VDD och en VSS (?)

Fixa det i så fall, omedelbart. Och sätt 100nF kondingar direkt vid pinnarna (inte med sladd mellan).

Jag skulle inte köra med så långa sladdar till kristallen heller, tryck dit den direkt vid PICen istället.
Användarvisningsbild
Chribbe76
EF Sponsor
Inlägg: 1167
Blev medlem: 17 januari 2004, 22:43:17
Ort: Stockholm

Inlägg av Chribbe76 »

Ok. Om man ska få pisk av nån så är det nog ifrån cyr. :D

Kristallkopplingen utan sladdar gör ingen skillnad.
Men matning på båda sidor och 100nF på varje sida om picen påverkade jätte mycket, nu kan lysdioden blinka i 15 sek innan den slocknar eller stannar lysande.

Nu kan jag knappast koppla på ett effektivare sätt på en labbplatta och det är fortfarande inte ok.

Så här skänsligt har det aldrig varit med nån pic förrut och jag har gjort väldigt avancerade program med alla pinnar kopplade och jag använder sällan kondingar på matningen.
MH100
Inlägg: 81
Blev medlem: 10 juni 2005, 23:54:53

Inlägg av MH100 »

Vet inte om det spelar nån roll men ska man inte ha ett motstånd till jord (typ 10k) på pinne PORTB5/PGM. Det har iaf jag alltid kört med. :D
Användarvisningsbild
Chribbe76
EF Sponsor
Inlägg: 1167
Blev medlem: 17 januari 2004, 22:43:17
Ort: Stockholm

Inlägg av Chribbe76 »

Configurationsbiten LVP bestämmer om man ska kunna programmera picen med låg spänning eller inte.
Så länge den är disabled så kan man använda hela PORTB som man behagar.

Men om den är enabled så kan man få dom symtom som jag har beskrivit och du har säkert rätt i det du säger men jag har alltid kört med disabled och då ska det inte vara något problem.
Användarvisningsbild
Chribbe76
EF Sponsor
Inlägg: 1167
Blev medlem: 17 januari 2004, 22:43:17
Ort: Stockholm

Inlägg av Chribbe76 »

Jag har provat att sätta alla pinnar som inte används till utgångar, för fladdrande ingångar är ju ingen hit men den stannade efter en stund iaf (tog nån minut)
Johan.o
EF Sponsor
Inlägg: 2387
Blev medlem: 18 juni 2003, 01:08:50
Ort: Jönköping

Inlägg av Johan.o »

Det var ju inte mycket till avkoppling du hade på brädan,
en elektrolyt tar bara hand om långsamma förlopp, och bör därför sitta parallellt med typ 0.1-1µF plastkonding.

Gärna så nära förbrukare som möjligt.

Genom att du satt kopplingen på höger sida så har du även extra långa
väg, genom kopplingsbrädan, brukar vara lite dålig kontakt i dom där..

Så jag rekomenderar korta kablar mellan förbrukare och spänningskälla.
Rikligt med elektrolyt och plastkondensatorer nära kretsarna.
Så stora som möjligt.

Du kan testa att sätta en 7805 på plattan med plastkondensatorer mycket nära
Vin<->GND och Vut<->GND. Så kan ju problem med ditt nätagg och långa kablar kanske uteslutas..

Ser att du använder en 18F, enligt databladet vill dom att man sätter
en resistor även i serie med MCLR, inte för att jag tror det är problemet.
Men man kan visst råka ut för (MCLR breakdown..) Vilket kan bero på
ESD, EOS. Litet tips.. Hur är det med ESD-skydd?

Låter helt klart som att din koppling är instabil. Om mjukvaran är utesluten?
Hoppas du hittar felet, möjligt kan ju picen tagit skada på något sätt.
Användarvisningsbild
Chribbe76
EF Sponsor
Inlägg: 1167
Blev medlem: 17 januari 2004, 22:43:17
Ort: Stockholm

Inlägg av Chribbe76 »

Nu ser det ut så här(jag har även testat med flera kondingar men det förändrar inget):

http://ake.myftp.org/forum/Bugg_med_Pic18F458_2.jpg

Jag driver kopplingen med ett labbagregat(PS613) och picen stannar fortfarande efter en stund.
Om jag driver med ett batteripack så verkar kopplingen vara stabil men om jag flyttar kondingarna långt ifrån picen så kan den falera.


Nästa offer, en Pic18F258
http://ake.myftp.org/forum/Bugg_med_Pic18F258.jpg
MPLAB projektet:
http://ake.myftp.org/forum/Bugg_med_Pic18F258.rar
Den blinkar inte längre än 1sek även med batteripack som strömkälla.

En intressant detalj är att om jag tar bort eller lägger till nopar i mitten av programmet så får jag olika resultat.
Ex:

-4 nop = stabil
-3 nop = stabil
-2 nop = stabil
-1 nop = stabil
orginal = instabil
+1 nop = stabil
+2 nop = stabil
+3 nop = stabil
+4 nop = stabil
+5 nop = stabil


+30 nop = stabil
+31 nop = stabil
+32 nop =instabil
+33 nop = stabil
+34 nop = stabil

+62 nop = stabil
+63 nop = stabil
+64 nop =instabil
+65 nop = stabil
+66 nop = stabil

+94 nop = stabil
+95 nop = stabil
+96 nop =instabil
+97 nop = stabil
+98 nop = stabil

+126 nop = stabil
+127 nop = stabil
+128 nop =instabil
+129 nop = stabil
+130 nop = stabil


Så det verkar som om adressen i program-minnet för det som är efter noparna påverkar resultatet.
Det kan knappast vara en slump att en adress-diff på 32 instruktioner ger samma resultat.

Kan det vara så att Microchip har gjort en tabbe i konstruktionen som kan framkallas med en väldigt specifik kombination av instruktioner vid specifika adresser?

Det skulle vara intressant om någon kan testa och verifiera mina teorier.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Hej.
Sätt kristallen direkt på aktuella pinnar !!
Jag har aldrig sett någon göra så där, med sladdar !? :-)

40-pinnars PIC18 har *dubbla* matningar (både 5V och GND).
Kolla databladet !!

> "Om jag driver med ett batteripack så verkar kopplingen vara stabil..."

Vadå "verkar" ?? *ÄR* den stabil eller inte ????
Och i så fall, vad säger det ? Att du har en "crappy" matning ?

> "jag använder sällan kondingar på matningen"

Att ha tur är inte detsamma som att göra rätt...
Använd *alltid* avkopplingkondingar för *alla* digital IC.
Om inte annat så för att undvika kommentarer om just det ! :-)

> "men om jag flyttar kondingarna långt ifrån picen "

Gör inte det...

Vad är det för fjuttig elyt du har där på bilden ?
Sätt dit en rejäl, så kanske det hjälper mot din svajiga nätdel.

Jag skulle ha kollat koden (och testar gärna i en
egen 18F458) om koden hade varit zippad.

WDT avstängd ?

Sätt dit flera LEDs som du tänder/släcker på strategiska platser i koden, så kanske du ser var det hela "stannar".
Användarvisningsbild
Chribbe76
EF Sponsor
Inlägg: 1167
Blev medlem: 17 januari 2004, 22:43:17
Ort: Stockholm

Inlägg av Chribbe76 »

> Sätt kristallen direkt på aktuella pinnar !!
> Jag har aldrig sett någon göra så där, med sladdar !?

Fungerar utmärkt, iaf upp till 10Mhz.

> 40-pinnars PIC18 har *dubbla* matningar (både 5V och GND).
> Kolla databladet !!

Hur många gånger ska vi älta samma sak om och om igen, läs hela tråden!

> Vadå "verkar" ?? *ÄR* den stabil eller inte ????
> Och i så fall, vad säger det ? Att du har en "crappy" matning ?

Om jag testar den i 5min utan problem men den ligger på gränsen, så är den inte nödvändigtvis stabil.
"Alla" nätagg ger en mer eller mindre oren spänning, jag skulle inte definiera det som "crappy" matning.

Jag skiter ofta i kondingar för att jag inte behöver ha några men jag vet att man ska ha det.

Jag flyttar kondingarna för att få reda på var gränsen går för att den ska bli instabil, kan vara bra att veta.

> Vad är det för fjuttig elyt du har där på bilden ?
> Sätt dit en rejäl, så kanske det hjälper mot din svajiga nätdel.

Läs hela inlägget ovan "jag har även testat med flera kondingar men det förändrar inget"


Det finns faktiskt en fördel med att koppla lite slarvigt när man labbar för om det fungerar bra då så kan det bara bli bättre när man ska göra ett kretskort.
Kopplar man optimalt från början så vet man inte hur stabil kopplingen är.
Om jag hade gjort det i detta fallet med den stabilaste picen så hade det kanske falerat först när allt är klart.


WDT är avstängd.

>Sätt dit flera LEDs som du tänder/släcker på strategiska platser i koden, så kanske du ser var det hela "stannar"

Problemet är att resultatet förändras av att man lägger in nya instruktioner i programmet men jag ska givetvis felsöka det här mer.


Så du gillar inte RAR. Jag tycker det är mycket som är rar-packat nuförtiden, så man kommer inte undan.


Om nån vill testa det här så är Pic18F258 att föredra för den fungerar sämst för mig.
cyr
Inlägg: 2712
Blev medlem: 27 maj 2003, 16:02:39
Ort: linköping
Kontakt:

Inlägg av cyr »

Om jag ska försöka klaga på något i inkopplingen nu (och det känns som det ändå är matningen/kopplingen som orsakar så här skumma problem) så skulle det vara att de två jordarna är kopplade så långt ifrån varandra. Testa att koppla den enda jorden till samma punkt som den andra med så kort ledning som möjligt.

För övrigt tycker jag det ser rätt ut, och jag har använt andra 18F i full fart på kopplingsdäck (som inte alls var så där prydliga) utan några som helst problem. Däremot har jag aldrig själv använt just 458, 452 eller 258. Om jag inte är helt borta så är de väl äldre varianter än t.ex. 4320 som jag använt, kan kanske vara så att de är väldigt känsliga?

Skulle gärna forska mer i problemet om jag hade några lämpliga PICar. Hatar att ha såna skumma problem i mina byggen (men jag lyckas nästan alltid undvika dom nu för tiden, kanske mycket på grund av att jag är så paranoid när det gäller jordning och bypass-kondingar :lol: ).
Användarvisningsbild
Chribbe76
EF Sponsor
Inlägg: 1167
Blev medlem: 17 januari 2004, 22:43:17
Ort: Stockholm

Inlägg av Chribbe76 »

Jag har provat som du sa och det blev ingen förbättring.

Jag är helt inne på att det är ett konstruktionsfel eller att Microchip har gjort en glädje-kalkyl när dom specat Pic18 till max 10Mhz+PLL.

Jag ska kontakta Microchip nästa vecka, men jag uppskattar naturligtvis om nån vill testa först.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> "Jag skiter ofta i kondingar"

OK, men det är ju lite dumt när man vill ha hjälp.
Du kunde ju ganska enkelt ha undvikit de kommentarerna genom att ha gjort rätt från början...

> "Jag är helt inne på att det är ett konstruktionsfel..."

He he, på en modell som har ganska många år "på nacken"
och som inte har något som liknar just dina problem i "errata sheet".
Sure...

Vissa andra PIC18 modeller har haft problem att komma upp i 40Mhz, men inte just dessa, så vitt jag vet...

> "Om nån vill testa det här så är Pic18F258 att föredra..."

Hm, hittar ingen 258'a, men skall prova med 458 och 252 så får vi se...


Jag har även packat upp din kod.
Generellt är det ganska rörigt med (vad som verkar vara)
en hel del överskottskod som inte används !?
En näst intill total avsaknad av kommentarer gör det inte enklare.

> INTEDG2 equ 4
>
> #DEFINE Zero STATUS,2 ;Zero flag - bit 2 of STATUS reg
> #DEFINE Carry STATUS,0 ;Carry flag - bit 0 of STATUS reg

Jag kan inte se var INTEDG2, Zero och Carry används...


> #DEFINE Led PORTD,1
> #DEFINE Button PORTD,0

Var sätts TRISD ?

> #DEFINE Disp_E1 PORTC,0
> #DEFINE Disp_RW PORTC,1
> #DEFINE Disp_RS PORTC,2
> #DEFINE Disp_E2 PORTA,4
> #DEFINE Disp_Data PORTB

Var används ovanstående ?

> ;Delay för Pic18 (macro-baserad)
> ;1-117440527 klockcycler

Hur är macrot verifierat ? Var kommer det från ?
Verkar enklare att sätta upp ett timer interrupt.

> ;----------sätt tris-----------
> bcf 9+Disp_E1
> bcf 9+Disp_E2
> bcf 9+Disp_RW
> bcf 9+Disp_RS

Om jag förstår rätt så sätter du här LATA och LATC
Varför det ? OCh varför på detta sätt ? Och vad
används dessa pinnar till ?

> bcf 12+Disp_E1
> bcf 12+Disp_E2
> bcf 12+Disp_RW
> bcf 12+Disp_RS

1. Du har inte något default radix, så är "12" dec eller hex ?
2. Om vi antar hex, så är det TRISA och TRISC som sätts.
3. Var används dessa pinnar ???
4. Mycket märkligt sätt att sätta TRIS, för övrigt. Varför gör du så ?


> bsf 12+Button

Hm, är detta TRIS biten för Button-pinnen ?
Varför inte ha det under rubriken ";----------sätt tris-----------"


> Loopa:
>
> btfss Button
> goto Loopa


> bcf 12+Led

Är inte detta ockå en TRIS bit ?

> Igen:
> bsf Led
> Delay .1000000
> bcf Led
> Delay .1000000
> goto Igen


Dock, jag måste i alla fall hålle med CYR om att det verkar vara något externt problem, som t.ex spänningsmatningen. Problemen försvinner ju när du kör med batteri. Har du några "öppna" pinnar som är ingångar ?
Sätt de i så fall som utgångar.

Jag skulle också plocka bort delay-macrot och sätta upp en timer istället.
cyr
Inlägg: 2712
Blev medlem: 27 maj 2003, 16:02:39
Ort: linköping
Kontakt:

Inlägg av cyr »

sodjan skrev:
> bcf 12+Disp_E1
> bcf 12+Disp_E2
> bcf 12+Disp_RW
> bcf 12+Disp_RS

4. Mycket märkligt sätt att sätta TRIS, för övrigt. Varför gör du så ?
Lite OT, men den här metoden att sätta TRIS (om det nu är det som sker), tycker jag är mycket bra. Har bara använt det i PIC16 där avståndet mellan PORTx och TRISx är precis en bank.

Fördelen är att man kan ha en #define som sätter en viss funktion på en pinne och om man ändrar denna så flyttas all användning till en annan pinne automatiskt (både PORTx,y och TRISx,y).

T.ex.

Kod: Markera allt

#define LCD_RS_PIN PORTB,3

...

bank1
bcf LCD_RS_PIN ; utgång
bank0
bsf LCD_RS_PIN ; hög
Man kan göra det ännu tydligare med fler #defines kanske, typ:

#define LCD_RS_PIN PORTB,3
#define LCD_RS_TRIS (LCD_RS_PIN+0x80)

Eller nåt sånt...

Chribbe: Du skulle kunna testa att fråga på microchips forum, där bör det ju finnas specialistkunskap på området...

edits: Svamlade lite mer om TRIS :)
Senast redigerad av cyr 26 juni 2005, 14:33:03, redigerad totalt 2 gånger.
Användarvisningsbild
Chribbe76
EF Sponsor
Inlägg: 1167
Blev medlem: 17 januari 2004, 22:43:17
Ort: Stockholm

Inlägg av Chribbe76 »

Det glädjer mig att du vill testa.

Som jag beskrev tidigare så uttrar sig felet vid denna väldigt specifika kombination av kod, om du tar bort noparna så blir det inget fel.
Programmet kan verka lite goddag yxskaft men det är för att jag har tagit bort kod som inte har förändrat resultatet men jag har inte tagit bort allt.

Macrot har jag skrivit själv.

I den senast versionen för Pic18F258 har jag tagit bort macrot, använd den om du inte gillar mitt macro men då får du ändra portarna.

Problemet är inte alls löst med batteri, inte med Pic18F258.

Övriga kommentarer tycker jag är tillräkligt besvarade.

Tack cyr.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Visst, det finns "trix" för både det ena och det andra, men jag kan direkt se två fall där dessa kanske inte är en bra ide :

1. När man har "skumma" problem. Lika bra att köra så "ren" kod som möjligt. Kanske hittar man en tankevurpa medans man "städar upp".

Men kanske först och främst :

2. När man ber andra att kolla koden.

Av samma anledningar skall naturligtsvis *all* kod som inte används i test-caset plockas bort !
Skriv svar