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 ? :roll:

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.