Sida 1 av 2
Problem med TRISB på 628
Postat: 14 maj 2009, 17:37:51
av Baloo
Hejsan.
Håller på med ett projekt som ska mäta fukten i varje av fyra lådor i min kompost och utifrån det starta en pump.
Jag har en loopslinga i koden som gör att de tolv dioderna multiplexas. Jag har nu skrivit koden så att dom fyra mittersta av dom tolv dioderna ska lysa. Jag använder mig av timer1 för att anropa ett interrupt som gör att mätningen slås på och i detta sveper den förbi en TRISB-operation som sätter alla pinnar i PORTB till ingångar. När jag gör detta, blinkar även de fyra dioderna till höger till. En liten kort stund men tillräckligt för att man ska se det. Kommenterar man bort denna operation till TRISB så händer inte detta.
Länkar till schema och board, om nån kan se att jag gjort nåt kapitalt fel, eller om det är något som jag missat ang bytet till inportar. Lägger inte med koden just nu.
Länk till schema
http://web.telia.com/~u83710687/forumbi ... schema.jpg
Länk till board
http://web.telia.com/~u83710687/forumbi ... tboard.jpg
/Björne
Re: Problem med TRISB på 628
Postat: 14 maj 2009, 17:51:47
av sodjan
> Lägger inte med koden just nu.
Gör gärna det, i alla fall en kort snutt som visar just problemet som du beskriver...
Re: Problem med TRISB på 628
Postat: 14 maj 2009, 18:07:48
av Baloo
Ok då, Du får väl som Du vill då. =)
Kod: Markera allt
MaetInit ;Hit kommer den varje gång det är dags att mäta, dvs interrupt för Clock1
movlw b'00001000' ;För att peka på nåt som inte finns innan TRISB
movwf PORTA ;Lägg ut på PortA
clrf PORTB
bsf STATUS, RP0 ;Välj bank 1
; movlw b'11111111' ;PortB alla till in
; movwf TRISB
bcf STATUS, RP0 ;Välj bank 0
clrf AD1
clrf AD2
clrf AD3
clrf AD4
clrf StapelRod
clrf StapelGul
clrf StapelGron
clrf IntVal1
clrf IntVal2
clrf Flags ;Nolla flaggbitar
Det utkommenterade är det som skapar problemet.
Sen passerar den förbi en konvertering av mätta värden, som nu är fast inskrivna värden.
Loopen som dioderna visa i är:
Kod: Markera allt
DiodUt
clrf PORTA ;Peka på dioder
DiodUt1 ;Detta tar värden från variablerna och lägger ut dom på dioderna
;Fungerande rutin
clrw
addwf StapelRod,w ;Tänd dioder i röd stapel
addlw 0x10
movwf PORTB
clrw
addwf StapelGul,w ;Tänd dioder i gul stapel
addlw 0x20
movwf PORTB
clrw
addwf StapelGron,w ;Tänd dioder i grön stapel
addlw 0x30
movwf PORTB
btfss Flags,IntFlag ;Kolla om dags för ny mätperiod
goto DiodUt1 ;Inte, vänta på ny mätperiod
goto MaetInit ;Påbörja en ny mätsekvens
Såå.
Re: Problem med TRISB på 628
Postat: 14 maj 2009, 21:45:19
av bos
Om du ska visa schema, visa gärna hela scheman. Ditt schema är klippt mitt i bussen, så det är svårt att se hur du kopplat.
Var går RB0-RB7?
Re: Problem med TRISB på 628
Postat: 14 maj 2009, 22:46:50
av Baloo
Det Du ser från dom två första AD-omvandlarna, är identiskt med det par där bussen är klippt. Valde att ta detta i stället för att ta hela schemat som då blir otydligt.
Re: Problem med TRISB på 628
Postat: 14 maj 2009, 22:49:06
av bos
Jag lyckas ändå inte se var RB0-RB7 går till.
Re: Problem med TRISB på 628
Postat: 14 maj 2009, 23:01:30
av Baloo
Oki. Jag missförstod Dig.
Jag har ritat det för min egen skull och vet var dom går, så har inte märkt dom.
RB0-RB3 går till DB0 till DB3 på 244an, IC10B. RB4 och RB5 går till 145an, IC8.
RB0-RB7 går även till alla fyra AD-kretsarna, där dom ska fungera som ingångar för att läsa av datat från dom kretsarna.
Har jag uttryckt mig så det går att förstå då?
Re: Problem med TRISB på 628
Postat: 14 maj 2009, 23:20:36
av sodjan
OK, så då är det alltså så att först har du RB0-7 som utgångar och då är det *bara*
PIC'en som driver de linjerna, eller hur ?
Sedan, när du slår över RB0-7 till ingångar, vad är det då som "driver" samma linjer/bussar ?
Jag antar att efter ett litet tag så kommer en av ADC'erna att enables via sin CS och bli
den krets som driver RB0-7 linjerna, men innan dess ?
Om du har ett läge där ingen/inget (t.ex pullup/pulldown motstånd) driver linjerna
så kan i princip vad som helst hända. Och i så fall är det en rejäl nybörjarmiss
i konstruktionen. Lektion 1A när det gäller CMOS, *aldrig* öppna ingångar !
Re: Problem med TRISB på 628
Postat: 14 maj 2009, 23:30:10
av Baloo
Ja, jag kom på det där i början när kortet var klart och jag började programmera. Fick lite underliga saker.
Innebär detta att jag borde ha pull-down på hela portB?
Ja, jag är nybörjare, lär mig hela tiden. Tack för komplimangen.

Re: Problem med TRISB på 628
Postat: 14 maj 2009, 23:33:33
av sodjan
> Innebär detta att jag borde ha pull-down på hela portB?
Det beror på svaret på mina frågor. Varför inte börja med det ?

Re: Problem med TRISB på 628
Postat: 14 maj 2009, 23:40:54
av Baloo
"OK, så då är det alltså så att först har du RB0-7 som utgångar och då är det *bara*
PIC'en som driver de linjerna, eller hur ?"
Ja, visst. Men via 244an då, men det kanske inte är det Du är ute efter.
"Sedan, när du slår över RB0-7 till ingångar, vad är det då som "driver" samma linjer/bussar ?
Jag antar att efter ett litet tag så kommer en av ADC'erna att enables via sin CS och bli
den krets som driver RB0-7 linjerna, men innan dess ?"
Ja, innan dess har jag inget att säga mot Dig. Det är Du som kan det här.
Men det innebär att så länge PORTB är utgångar så blir det inget problem, inte så länge dom är ingångar inte heller. Men just i mellanskedet har jag ett problem?
Detta kommer bara hända en gång i timmen, så isf kan jag leva med att det blinkar till.
Tror det är mer jobb att göra ett nytt kretskort och avlöda, löda på komponeterna.
Men OM jag skulle vara tvungen att göra om kortet. RÄCKER det då att sätta ett 10k motstånd på varje RB-pinne som pull-down?
Re: Problem med TRISB på 628
Postat: 14 maj 2009, 23:49:06
av sodjan
> Men det innebär att så länge PORTB är utgångar så blir det inget problem,...
Korrekt, då drivs ju linjerna aktivt av PIC'en.
> inte så länge dom är ingångar inte heller.
Jo, just *då* (om inte någon av ADC'erna driver linjerna, men det gör
de väl inte hela tiden?)
> Men just i mellanskedet har jag ett problem?
Vilket "mellanskede" ?
Du måste ha något (normalt pullup- eller pulldown-motstånd beroende på hur du vill
ha det) som ser till att hålla linjerna i ett känt läge när det inte finns någon/något
annat som aktivt driver linjerna.
Kan eventuellt lösas med motståndsnät (SIL eller SMD) som monteras dit på
befintligt kort. Eller så lerver du med störningarna en erfarenhet rikare...

Notera dock att det fortarande är lite spekulation, bara tester efter att ha
monterat motståndsnät eller mätning med oscilloskop skulle visa som det
är som jag gissar eller inte. Mycket talar dock för det...
Re: Problem med TRISB på 628
Postat: 14 maj 2009, 23:56:40
av Baloo
Nej, jag kan inte annat än hålla med Dig. Jag tror att, om det inte visar sig längre fram att jag får fler/större problem, får jag leva med den lilla blinkningen, som Du säger, en erfarenhet rikare. Jag har mätt med oscilloskop och PortB släpper igenom en puls precis när jag växlar mellan utgång till ingång.
"> inte så länge dom är ingångar inte heller.
Jo, just *då* (om inte någon av ADC'erna driver linjerna, men det gör
de väl inte hela tiden?)"
> Men just i mellanskedet har jag ett problem?
Vilket "mellanskede" ?
Jag är inte helt med här. Vad jag förstår, så hänger porten i luften just när jag växlar mellan utgång till ingång. Hänger den mer efter att bytet är gjort? Jag har ju multilexer som styr vad som ska vara på, via dom tre lägsta bitarna i PortA.
Jag tittar just nu på motståndsnät. Kan man isf använda ett med ett ben gemensant eller måste man ha ett nät i form av DIL? Ett gemensamt som är anslutet till jord borde väl fungera?
Re: Problem med TRISB på 628
Postat: 15 maj 2009, 00:02:01
av sodjan
> Vad jag förstår, så hänger porten i luften just när jag växlar mellan utgång till ingång.
Den "hänger i luften" från det att du switchar PORTB till ingångar fram tills
något annat (t.ex en av ADC'erna) börjar driva samma linjer. Det har inget
med själva switchningen som sådant av TRISB att göra. Problemet är att du
(sannolikt) har perioder då *ingenting* driver linjerna aktivt.
En motståndsnät med gemensam pinne är OK, finns t.ex 9-pinnars med
8 st motstånd. 8 x 10 KOhm eller 8 x 100 KOhm borde fungera utmärkt.
Sen om den gemensamma pinnen ska ligga till jord eller +V vet jag inte,
det beror på hur du vill ha linjerna "i vila", så att säga. Sannolikt till jord...
Re: Problem med TRISB på 628
Postat: 15 maj 2009, 00:09:09
av Baloo
Tack Sodjan för all hjälp med det här!
Jag var inne på det i början när jag som sagt började programmera och fick lite konstiga resultat.
Jag ska kika på om jag kan skruva in ett motståndsnät på 10k. Har aldrig använt ett så nu när jag tittar på det i Eagle sitter jag och river mig i huvudet hur man ritar in det i schemat...
Vad är det som avgör valet av 10k eller 100k. Har förstått att 10k är ett bra riktvärde för Pullup/pulldown. Men har inte riktigt förstått vad det är som avgör värde på dom.