skumma fel med 16F874A

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Robert Nielsen
Inlägg: 700
Blev medlem: 23 augusti 2003, 20:42:38

skumma fel med 16F874A

Inlägg av Robert Nielsen »

Håller på och sätter mig in i hur 16F874an fungerar men har stött på två problem som jag hoppas nån kan hjälpa mig med

1.
Har skrivit ett rinnande ljus men men när man kopplar flera lysdioder på varje port (om dom lyser samtidigt) så stannar processorn och dioderna lyser konstant. Har använd samma program till en 16F628 och då fungerar det.
Har jag en diod på varje port så kan de lysa samtidigt.
Vad beror detta på???
Kan jag inte driva dioderna direkt från processorn som man kan på 16F628an???


2.
Jag kan inte få input att fungera på processorn. Jag har användt exempelvis denna kod: (mikroBasic)

Kod: Markera allt

TrisA = 0
TrisB = 255

If PortB.0 = 1 then
PortA.0 = 1
End if
PortA.1 = 1
delay_ms (850)
PortA.0 = 0
PortA.1 = 1
Sen en loop till baka till början. Dioden på portA.1 blinkar men inte på PortA.0

Har provat samma kod på en 16F628 och då fungerar det.
Är det något som skiljer dessa processorer när man ska skriva koden till dom. Olika komandon???
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Vad menar du med att "driva dioderna direkt från processorn" ?
Du måste naturligtsvis ha ett strömbegränsningsmotstånd också, eller hur ?

Vad menar du med "kopplar flera lysdioder på varje port" ??
Flera till samma pinne ? Och i så fall, hur då ?

Koden du har klippt in kan knappast fungera. Du säger "Sen en loop till baka till början", men då behöver du en goto (eller hur man nu gör i Basic...) Posta hela snutten så att det går att se vad du gör i verkligheten, inte vad du *tror* att du gör.

Konstigt att PortA.1 "blinkar", du sätter den ju aldrig = 0.
menar du inte tvärt om ?

>> "Har provat samma kod på en 16F628 och då fungerar det."

Högst osannolikt, i all fall inte koden du har visat *här*. Kanske någon annan, mer komplett kod, som du har själv, men det är det ju svårt att ha någon uppfattning om...

>> "Är det något som skiljer dessa processorer..."

The data sheets are your friends... :-)

Jo, det är massor som skiljer. Inte olika "kommandon", men en hel del skillnader i arkitekturen...
Robert Nielsen
Inlägg: 700
Blev medlem: 23 augusti 2003, 20:42:38

Inlägg av Robert Nielsen »

Jag har inte användt några motstånd då processorn har inbygd strömbegränsning på 25mA

Varje port har olika pinnar ex. PortB har 8 pinnar altså kan jag analuta 8 dioder som kan styras individuelt.


Härkommer koden, satt vid fel dator när jag skrev förra inlägget, men jag la in koden som ett exempel.

Kod: Markera allt

Main:
Cmcon = 7
TrisA = 255
TrisB = 0

If PortA.0 = 1 then
PortB.0 = 1
delay_ms (250)
PortB.1 = 1
delay_ms (250)
PortB.2 = 1
delay_ms (250)
PortB.3 = 1
delay_ms (250)
PortB.0 = 0
delay_ms (250)
PortB.1 = 0
delay_ms (250)
PortB.2 = 0
delay_ms (250)
PortB.3 = 0
delay_ms (250)
end if

PortB.4 = 1
delay_ms (250)
PortB.4 = 0
delay_ms (250)

goto main
end.

Jag vet mycket väl att det skilljer massor i utseende och antalet i/o, olika stort minne mm. Men jag undrade om det krävs extra komandon. Jag hade liknande problem på 16F628 men då visade det sig att man var tvungen att stänga av komparatorn. (som jag även har provat på denna processorn)

Jag har läst i databladet men det är ju bara kodexempel skrivna i asembler.
Användarvisningsbild
Schnegelwerfer
Inlägg: 1863
Blev medlem: 8 november 2004, 13:46:56

Inlägg av Schnegelwerfer »

Jag har läst databladet, och inte hittat någon inbyggd strömbegränsning på 25mA. Däremot är "Absolute Maximum Rating" för I/O-portarna 25mA, det är stor skillnad!

Du överbelastar helt enkelt portarna, och då kan vad som helst hända!

Pilla dit strömbegränsningmotstånd så kommer det nog att fungera.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> "då processorn har inbygd strömbegränsning på 25mA "

HELT FEL !!!

Du får under inga omständigheter "dra" mer än 25 mA från en enskild pinne på en PIC (finns ett par undantag). Slå något tungt i huvudet på den som som sagt det till dig...

Observera också att man inte kan dra 25 mA från ALLA 8 bitarna i samma port samtidigt. Samt att det även finns ett max för *HELA* kretsen !! V.v. läs "Absolute Maximum Ratings" i data bladet !

Det är möjligt att man kan pressa ut mer än 25 mA från en pinne, men då kör du "out of spec" och får skylla dig själv om det inte fungerar...

> "Jag har läst i databladet..."

Å f-n ! :-)

> men det är ju bara kodexempel skrivna i asembler."

Självklart, alla "riktiga" programmerare kör med assembler... :-)
Robert Nielsen
Inlägg: 700
Blev medlem: 23 augusti 2003, 20:42:38

Inlägg av Robert Nielsen »

Strömmen som flöt genom dioden var 23mA, 2mA under vad man får ta ut.
Har 5 dioder kopplade till samma port 5 * 23 = under de 200mA som max får belasta samma port med.


Det hjälpte att använda motstånd så den inte hängde sig, men inputen fungerar ändå inte.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Vad är anslutet till PortA.0 ??

Och vad betyder "inputen fungerar inte" ??

Vad förväntar du dig skall hända, och vad händer istället ?


För övrigt behöver du inte sätta om CMCON, TRISA och TRISB varje "varv" i din loop.

Har du kollat vilken assebler kod som Basic kompilatorn genererar, så att det inte är något "konstigt" där ? (Detta är en av anledningarna till att man ska kunna assembler, så att man kan läsa assembler listorna från kompilatorer...)
Robert Nielsen
Inlägg: 700
Blev medlem: 23 augusti 2003, 20:42:38

Inlägg av Robert Nielsen »

PortA.0 är ansluten till en brytare med pulldown.

Det jag vill med brytaren är att ljuset ska "rinna" så länge som brytaren är till (ingången hög). Istället blinkar PortB.4

Det verkar ju som att den inte detekterar att det finns en etta på PortA.0.


Jag har kollat asemblerkoden men begriper inte något av det som står där. Så det är ju inte så lätt att se om det är rätt.
Användarvisningsbild
Schnegelwerfer
Inlägg: 1863
Blev medlem: 8 november 2004, 13:46:56

Inlägg av Schnegelwerfer »

Nu kan jag inte Pascal, men borde inte språket göra skillnad på tilldelning av variabler och test av variabler (jfr = och == i C)

Du har ju samma syntax i:

If PortA.0 = 1 then (detta skall ju testa bit 0 i PortA)

Som i:

PortB.0 = 0 (detta skall ju tilldela PortB.0 värdet 0)

Hmm.. hoppas du förstod vad jag menade.
Robert Nielsen
Inlägg: 700
Blev medlem: 23 augusti 2003, 20:42:38

Inlägg av Robert Nielsen »

Förstår inte riktigt vad du menar.
Var kom Pascal in i bilden???
Användarvisningsbild
Schnegelwerfer
Inlägg: 1863
Blev medlem: 8 november 2004, 13:46:56

Inlägg av Schnegelwerfer »

Menade naturligtvis Basic. :oops:

Vad jag menade var att många språk använder olika "=" beroende på om du vill sätta en variabel eller testa variabeln i fråga.
mullemeck
Inlägg: 1306
Blev medlem: 27 maj 2003, 23:52:06
Ort: Lund
Kontakt:

Inlägg av mullemeck »

Du kan ju kolla för säkerhets skull att där verkligen kommer in +5v till PortA.0 när du trycker på din brytare så det inte är nått hårdvarufel som spökar.

annars kan du ju testa en annan port, kan ju va att just porta.0 är trasig eller nått i den stilen.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Har du sett en lilla rutan där det står "Note:"
på sidan där PORTA beskrivs i data bladet ??

Och kodexemplet på samma sida ?

Har du läst igenom vad som gäller för PORTA ?

Har du satt PORTA till digital I/O ?

PORTA är sannolikt inte trasig, den är bara inte konfigurerad på rätt sätt...
Robert Nielsen
Inlägg: 700
Blev medlem: 23 augusti 2003, 20:42:38

Inlägg av Robert Nielsen »

Har mätt och jag får fram 5volt till pinnen.

Jag har läst den sidan men blir inte klokare, Har provat med ex. TrisA.0 = 1
Fungerar ändå inte.
Har även provat med PortA PortC PortD men ingen fungerar som input.


Att det är något konfigruationsfel har jag också räknat ut, men vad är fel.

Det står något om analog input men hur stänger man av det???
Användarvisningsbild
Icecap
Inlägg: 26643
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg av Icecap »

Man kollar det register som de hänvisar till såklart!

Man kan även (samma sak) kolla upp de analoga funktioner och hur man slår av dom, det har jag gjort och det fungerar alldeles utmärkt.
Skriv svar