Cigarrövervakare

Berätta om dina pågående projekt.
Användarvisningsbild
Noddan
Inlägg: 257
Blev medlem: 23 september 2004, 16:28:12
Ort: Göteborg
Kontakt:

Inlägg av Noddan »

Hoppas den kommer till nytta! Som kompilator rekommenderar jag starkt CodeVison AVR, man slipper konfigurera den "manuellt" då det finns en inbyggd CodeWizard som sätter register och sånt rätt efter inställningarna man valt. Väldigt smidigt i början, men visst borde man lära sig att göra allt självt "någon dag".

*host host*, rutinerna fanns inbyggda. Om du laddar hem CodeVision så får du samma bibliotek som jag, och då borde det bara gå att köra. Det är dessutom gratis för icke-kommersiella syften med några begränsningar (t.ex. kan man inte använda interruptdriven USART-kommunikation och bara skriva halva minnet eller något sådant). Här hittar du CodeVision =)
Användarvisningsbild
Noddan
Inlägg: 257
Blev medlem: 23 september 2004, 16:28:12
Ort: Göteborg
Kontakt:

Liten uppdatering..

Inlägg av Noddan »

Då har det varit föreningskväll på ETA igen, labbade lite med 4511-kretsarna och har nu fått 7-segmenten att fungera som dom ska. Dessvärre har jag bara testat de ett och ett, så det är inte någon färdig display än. Tyckte ändå det var värt en liten uppdatering eftersom alla delar nu fungerar oberoende av varandra, nu är det bara att klistra ihop allting till en helhet. Två bilder på labbdäcket (skrev ett litet program som går igenom siffrorna 0-9 om och om igen. Blev nästan förhäxad :D ):
Mörk bild
Bild

Ljus bild
Bild


Har även pillat en hel del med kretskortslayouten för displaykorten. Det var en hel del jobb för att få allt att gå på ett bra sätt, men jag tror att den nuvarande i princip är så bra jag kan få den. Bild på schema och kretskortslayout nedan. Jag tänker sätta 7-segmentsdisplayerna i lätt modifierad IC-sockellist så att man får plats med motstånden under segmenten. Blev smått omöjligt annars.

Kretskortslayout
Bild

Kopplingsschema
Bild

Sisådär, kommentarer eller förbättringar på displaykorten mottages varmt =) Får förhoppningsvis etsat/lött/testat ett displaykort inom en ganska snar framtid, men man vet aldrig med chalmers..
Användarvisningsbild
Henrik
Inlägg: 661
Blev medlem: 26 maj 2003, 23:39:14
Ort: Göteborg
Kontakt:

Inlägg av Henrik »

Din krets fungerar bevisligen OK, men jag tänkte förklara en vanligare variant med exempelvis 3x7-segment.

Dessa har i allmänhet parallellkopplade segment A-G, så hur man styr dem kanske inte är direkt uppenbart. De har däremot individuella GA/GK.
Detta gör att du kan "slå på" ett 7-segment åt gången, och växlar du då mellan 7-segmenten tillräckligt fort(>50Hz) så hinner ögat inte uppfatta flimret. Vilken siffra som skall visas får din mikrokontroller ta fram.

Du klarar dig på så sätt med en enda 4511, om du ens måste ha en. Eftersom du ändå kör med en mikrokontroller som utan vidare orkar driva några led, så kan du sätta upp en vektor som styr segmenten - så slipper du 4511:an helt:

Kod: Markera allt

const char siffra[10] = 
{
	//edfcgabXX	display segment table. X = display select	
	0b11110110,
	0b00010010,
	0b11001110,
	0b01011110,
	0b00111010,
	0b01111100,
	0b11111100,
	0b00010110,
	0b11111110,
	0b01111110
}; 
För att nu visa en nolla, så gör du helt enkelt:

UTPORT = siffra[0];

Givetvis förutsatt att du kopplar segmenten enligt ovanstående vektor.
Användarvisningsbild
Noddan
Inlägg: 257
Blev medlem: 23 september 2004, 16:28:12
Ort: Göteborg
Kontakt:

Inlägg av Noddan »

Mjo jag funderade på att multiplexa först, men det kändes som en "fullösning". 4511:an har inbyggd latch så man slipper scanna igenom alla displayerna hela tiden, det räcker med att uppdatera de så fort som en siffra har ändrats. I just det här projektet är det ju skitsamma eftersom man inte har något vettigare att lägga processorkraften på, men det är ett medvetet val för att få det hela lite mer "på riktigt".
Användarvisningsbild
Noddan
Inlägg: 257
Blev medlem: 23 september 2004, 16:28:12
Ort: Göteborg
Kontakt:

Uppdatering: 18 Oktober 2005

Inlägg av Noddan »

Precis som jag förutspådde tog det lång tid innan tid fanns till projektet igen. Är mitt uppe i en tentaperiod, och det är inte direkt lysande. Nästa period ser dock slappare ut, då blir det väl mer tid över! Hur som helst, jag har tillverkat en prototyp till displaykortet som jag ikväll har lekt med och testat.

Själva kortet är gjort efter PCB-layoten ovan med några småmodifikationer, lite smartare ledningsdragning och möjlighet till borrhål. Efter att ha etsat om en gång (dumma fingeravtryck) och lekt med lödpennan så fick jag fastlött allting, 7-segmentsdisplayerna sitter i någon form av hylslist för att motstånden skall få plats under. Nästa version kommer troligtvis att använda SMD-motstånd på baksidan istället. Så här blev iallafall kortet färdigt:

Undersidan av kortet
Bild

Översidan
Bild


Ett dött kort som inte visar någonting är förvisso roligt att se på i några minuter, men det är väl mest för att det är mitt eget projekt som ens det är roligt. Ikväll har jag som sagt kopplat in displaykortet direkt till min STK500 för att leka lite. För att få det pinkompatibelt så gick det åt lite kopplingstråd och en del huvudbry, men det funkade konstigt nog på första försöket. Skrev lite snabbkod för att testa, loopar siffror från 0->999 nu bara. Siffrorna betedde sig dock lite underligt tills jag kom på att några 1meg-motstånd mellan load-enable och jord gjorde susen.

Kärlek...
Bild

Försök att få denna betrakningsvinkeln med en LCD!
Bild


Min kod för att lägga ut en siffra är dock lite ful, ska klura lite pår hur C hanterar integers. Så fort jag skriver / nu så verkar den skapa ett flyttal, vilket jag inte vill. Dumma smarta kompilatorer. För att separera tiotalssiffran vill jag kunna skriva PORTD = Siffra/10 100*(Siffra/100) + 0b10100000, men den byter ut 100*(Siffra/100) mot Siffra direkt vilket jag inte tycker att den borde göra. Någon som har ett tips?
Användarvisningsbild
rickeboy
Inlägg: 678
Blev medlem: 13 augusti 2003, 09:12:17
Ort: Göteborg / Karlskrona
Kontakt:

Inlägg av rickeboy »

Coolt!
Har en fundering dock... fattar inte riktigt hur du styr 7-segementsdisplayerna :oops:
Kollade upp 4511:orna också och förstår lite mer men vill ändå ha en förklaring :)

Fattade Henry´s sätt... (tror jag) men på hans sätt går det väl åt en port (7pinnar iaf) för varje dipslay? Eller tänker jag tokigt?

Fastän koden ser "illa" ut tror jag det hade varit både givande och kul!

//rickeboy
Användarvisningsbild
Noddan
Inlägg: 257
Blev medlem: 23 september 2004, 16:28:12
Ort: Göteborg
Kontakt:

Inlägg av Noddan »

Tackar tackar :) Jag gillar verkligen 7-segmentsdisplayer. De känns rediga på något sätt.

Henrys sätt kräver 7 pinnar per display ja, och dessutom så måste mikroprocessorn alltid loopa igenom displayerna. Gillar inte riktigt multiplexning, känns som ett litet fulmeck på något sätt.

Jag kan lägga upp koden när jag fräschat till den lite grand, kanske till nästa uppdatering, men som det är nu är den både ointressant och icke-fungerande eftersom jag försökt förbättra den :)

I princip går det iallafall till såhär:

Kod: Markera allt

void UppdateraDisplay(int Siffra)[
  PORTD = Siffra/100 + 0b01100000; <-- där tar jag ut hundratalssiffran genom att dela med 100, och sedan lägger jag pinne 7 låg för att aktivera den displayen. Displayerna sitter alltså på pinne 5, 6 och 7.
  wait_ms(1); <-- här väntar jag på att 4511:an ska hinna läsa in värdet. Går säkert med kortare tid också, ska labba mer med det senare.
  PORTD = Siffra/100 + 0b11100000; <-- Stänger av Load Enable på samtliga displayer, men låter samma siffra ligga på. Detta för att undvika att ett felaktigt värde slås in precis i slutet.
  wait_ms(1);

  PORTD = Siffra/10 + 100*(Siffra/100) + 0b10100000 <-- Det där fungerar alltså inte, men tanken är att dela med 10 för att få tiotalssiffran och sedan ta bort hundratalssiffran. Sedan är koden likadan.
]
Det är alltså kopplat så att alla 4511:or får samma siffra på sig hela tiden, men sedan väljer jag vilken av de som ska spara värdet genom att sätta Load Enable på den. Blir det klarare, eller är jag en jättedålig pedagog?

Ställ gärna fler frågor om något är oklart! :)
Användarvisningsbild
rickeboy
Inlägg: 678
Blev medlem: 13 augusti 2003, 09:12:17
Ort: Göteborg / Karlskrona
Kontakt:

Inlägg av rickeboy »

Tack!
Av att dömma av kopplingschemat och databladet för 4511 va det så jag trodde... gött!
7-segmentsdisplayer är riktigt trevliga... Om man vill ha lite OldSchool känsla och om det bara är mätvärden som ska vissas så är LCD nästan lite överflödigt... har några 7-segments liggandes (har haft det ngt år) aldrig kommit till skott dock... har beställt några 4511:or... får väl se när de dyker upp och om man är hemma ngn helg i närheten då de kommer :)

//rickeboy
Skriv svar