Charlieplexing problem

Lysdioder, Optiska sensorer, Fiberoptik, Displayer, Lasrar, Optiska kopplare
anda
Inlägg: 91
Blev medlem: 29 juni 2008, 20:17:21
Ort: Västerås

Charlieplexing problem

Inlägg av anda »

Tjo!

Sitter o leker med charlieplexing. Har en AVR processor(Mega 16) och jag charlie plexar lite på port D.

Jag har två sjusegments displayer med gemensam katod som är mina labbobjekt.


Hursom helst jag får "spöken"(dvs det lyser svagt) på sju segmentaren som ska vara släckt. Kopplat enligt såhär.

AVRPINNE 0...7
Sjusegment 1: katod GFABDEC
Sjusegment 2 C katord GFABDE

Den märkliga ordningen kommer sig ur pinouten för sjusegmentarna. Detta är ordningen från väster till höger upp o ner, men det spelar ju ingen roll.

Sjusegmentarna drivs med en bc547 enligt bild (snygg bild va? =) )

Bild

R1 är 1k
R2 är 680

Koden såhär.

Kod: Markera allt

#define F_CPU 1000000

#include <avr/io.h>
#include <util/delay.h>
#include <inttypes.h>


#define BCDPORT PORTD
#define BCDDDR DDRD

uint8_t bcd[]={	0x7E,
				0x48,
				0x3D,
				0x4B,
				0x67,
				0x77,
				0x4C,
				0x7F,
				0x4F,
				0x5F,
				0x73,
				0x36,
				0x79,
				0x37,
				0x17};


int main(void){
	uint8_t volatile i=0;
	while(1){
		BCDDDR = (0x01 << i) ; // Första segmentet sitter med katoden på BCDPORT.0
		BCDPORT =  (0x01 << i) | ~(bcd[i+1] << i+1); // kör pullup på lämpliga pinnar
		i++;
		_delay_ms(1000);
		BCDDDR=(0x01 << i); // andra segmentet sitter med katoden på BCDPORT.1
		BCDPORT=(0x01 << i) | ~(bcd[i+1] << i+1);
		_delay_ms(1000);
		i++;		
		if(i==2)
			i=0; 
	}
}

Tanken är.
För varje display
sätt katod pinnen låg(DVS utgång o hög i mitt fall, gör ju att potentialen hos transistorns kollektor blir rätt låg, ca 0,7 Volt)
Sättpullupp på de segment som ska vara tända så att transistorn är helt avstängd.

Missar jag något? (Det känns som en retorisk fråga eftersom det inte funkar =) )

mvh
Anders
Nerre
Inlägg: 27229
Blev medlem: 19 maj 2008, 07:51:04
Ort: Upplands väsby

Re: Charlieplexing problem

Inlägg av Nerre »

Jag har inte alls kollat på vad du pysslar med, men charlieplexing utnyttjar ju tristate-läget på portarna och så fort du börjar blanda in en drivtransistor så har du inte längre nån charlieplexing (för drivtransistorn kan aldrig gå i tristate).

Med charlieplexing använder du ju utgångarna så att varje utgång blir som en tre-läges omkopplare, med mittenläget som "off".
reine
Inlägg: 33
Blev medlem: 25 augusti 2009, 11:52:30
Ort: Stenungsund

Re: Charlieplexing problem

Inlägg av reine »

Jag har precis gjort en charlieplexing med 4 displayer och en bcd till 7-segment avkodare, och jag fick också skuggor. Jag körde i början på väldigt hög fart (utan timer interrupts) och bytte värde och display i samma operation (allt sitter på en PIC port).

Jag ändrade så att displayen var släckt under några cykler genom att först släcka displayerna, ta fram nästa siffra som skulle visas (kanske ett par noppar också) sedan satte jag det nya.
Jag sänkte dessutom uppdateringsfrekvensen till ca 50Hz ( Jag byter alltså display ca 200 ggr sekund)

När jag hade gjort det, så hade jag inga skuggor kvar... har en känsla av att det var min "tighta" switch mellan som gav de mesta skuggorna.

Mvh
Reine
anda
Inlägg: 91
Blev medlem: 29 juni 2008, 20:17:21
Ort: Västerås

Re: Charlieplexing problem

Inlägg av anda »

Jag skippade transistorerna och lät avrens portar driva sjusegmentarna direkt. Inga skuggor =)

Det enda som är lite trist är att det lyser så lite. AVR specar ju att den kan sänka 20 mA per port. 20/7/4 blir inte många mA kvar att lysa med =(

edit:

Jag körde med 1 Hz.
reine
Inlägg: 33
Blev medlem: 25 augusti 2009, 11:52:30
Ort: Stenungsund

Re: Charlieplexing problem

Inlägg av reine »

Om du har displayer med gemensam anod, så kan du väl mata genom en transistor och sänka mot AVR'en.

Om du har gemensam katod får du väl kanske ha transistorer både före och efter, där den på katoden väljer segment och de på anoderna matar segmenten...

Eller som jag, leta upp en gammal BCD till 7-segment driver samt transistor på den gemensamma anoden (om jag nu inte ha fullständigt hjärnsläpp)... :)

Edit:
Läste precis :) . Såg att du hade gemensam katod...

Testa att sätta en transistor där som du sänker med mot jord istället för att dra in det i AVR'en igen (fast det kanske var så det var från början...).
Användarvisningsbild
Marta
EF Sponsor
Inlägg: 7473
Blev medlem: 30 mars 2005, 01:19:59
Ort: Landskrona
Kontakt:

Re: Charlieplexing problem

Inlägg av Marta »

Det går alldeles utmärkt att charlieplexa och använda drivtrissa. Denna skall då vara en emitterföljare som driver den gemensamma katoden eller anoden. PNP respektive NPN beroende på vilket det är. Du skall alltså använda PNP med kollektorn till GND, emittern till displayens katod och basen dit Du nu har katoden direktkopplad. Inga extra motstånd eller annat, endast trissorna.
anda
Inlägg: 91
Blev medlem: 29 juni 2008, 20:17:21
Ort: Västerås

Re: Charlieplexing problem

Inlägg av anda »

Tack. Det funkar perfekt, jag hade på känn att det borde gå men hade nog inte lyckats själv!!
anda
Inlägg: 91
Blev medlem: 29 juni 2008, 20:17:21
Ort: Västerås

Re: Charlieplexing problem

Inlägg av anda »

Jag lyckas inte styra sjusegmentarna.

Bild

Avrens portar går in till vänster på 1k resistorn. Jag hittade ingen bra symbol för en generell port. Jag har bara ritat ut tre men principen är ju den samma =)

@Marta har jag förstått dig rätt?
reine
Inlägg: 33
Blev medlem: 25 augusti 2009, 11:52:30
Ort: Stenungsund

Re: Charlieplexing problem

Inlägg av reine »

Hej

Hur styr du katoden på displayerna? Där måste du också ha en transistor så att du kan välja vilken du styr...

Såhär hade jag kopplat (får nog lära mig att ladda upp bilder tror jag):

Jag hade styrt varje segment med PNP(t.ex. en 557), basen kopplad till AVR'en via 1k motstånd, emitter till 5V och kollektorn via 470 Ohm till segmentet.

Sedan hade jag kopplat katoden på via en NPN, katoden till kollektorn, emittern till jord och basen via 1k motstånd till AVR.

Mvh
Reine
Användarvisningsbild
Marta
EF Sponsor
Inlägg: 7473
Blev medlem: 30 mars 2005, 01:19:59
Ort: Landskrona
Kontakt:

Re: Charlieplexing problem

Inlägg av Marta »

Du skall koppla andoderna direkt till portarna via ett lämpligt motstånd, inte använda transistorer där. Du kan eventuellt använda NPN emitterföljare till detta. Du kan inte använda drivare med gemensam emitter.

Räcker inte strömmen som kretsen kan sourca med tillräcklig ljusstyrka? Tyckte Du skrev något om 20mA och det skall ju räcka fint, eller finns det en limit på max Icc <140mA som gör att det tar emot?

Charlieplexing bygger på att utgången har 3 lägen och inte bara 2. När den sätts i tristate så får varken den gemensamma katod som är ansluten dit, eller anod, kunna drivas. Det får alltså inte finnas något som håller kvar nivån vid GND/Vcc. Dina anoddrivare låser porten till nolla och aktiverar katoddrivaren som den delar pinne med.

Katoddrivarna är rätt utförda.
anda
Inlägg: 91
Blev medlem: 29 juni 2008, 20:17:21
Ort: Västerås

Re: Charlieplexing problem

Inlägg av anda »

@Marta jag läste din första post som: Lägg bara till emitterföljar transistorer så blir det rätt.

Det jag började fundera på vad händer med tristaten och det bekräftar du nu. Det är fel.

Jag plockar bort transistorerna och stoppar resistorer direkt!

Bild

Nu ska det väl gå =)
Skriv svar