Sida 1 av 1
Bordsklocka, AVR
Postat: 19 augusti 2008, 01:14:06
av Ranstam
Hej
Har nästan färdigställt mitt senaste projekt. En Bordsklocka med 2x16 HD44780 display och en AVR Atmega88 på 8Mhz med extern kristall.
Bild 1.
Bild 2.
Uppdateringen av klockan är interupt baserad, och efter 4dagar konstaterades att den saktade sig ungefär 3s per dygn. När detta rättades upp så kunde jag inte märka någon direkt avdrift... kanske i klass med ett armbandsur av billigare modell.
Plåten som allting sitter på är 4mm aluminium, borrat/filat ut för displayen. Eftersom plåten var lite sliten så blästrade jag den, och målade den med svart hammarlack(mycket förlåtande lack).
Strömförsörjningen kommer från 4st AA NIMH 2000mAh batterier(ikea), strömförbrukningen med backlighten tänd hamnade på runt 25mA(underligt lite...) så den klarar sig ungefär 3dagar på batterierna
Nu återstår bara att fixa en fin aluminium ram och centrera displayen i luckan!
//Alexander
---------------------
Varför är det så svårt??
Max 700 pixlar i bredd
Nu får du dras med tråkiga länkar istället för fina bilder.
//Jimmy
---------------------
Postat: 19 augusti 2008, 11:22:34
av MicaelKarlsson
Såg ju trevligt ut!
Har du lust att dela med dig av koden?
Du hade inga större bilder??

(max 700 i bredd)
Postat: 19 augusti 2008, 11:51:38
av ElectricMan
Bilderna funkar utmärkt med en 40" skärm

Postat: 19 augusti 2008, 12:05:39
av Ranstam
Sorry för bilderna... Här kommer koden iaf!
#include <stdlib.h>
#include <avr/io.h>
#include <avr/pgmspace.h>
#include "lcd.h"
#include <avr/interrupt.h>
volatile int sekund = 00;
volatile int minut = 24;
volatile int timme = 22;
volatile int display = 1;
char min[3];
char sek[3];
char tim[3];
int main(void)
{
TCCR1B |= (1 << WGM12);
TIMSK |= (1 << OCIE1A);
sei();
OCR1A = 31250;
TCCR1B |= (1 << CS12 );
lcd_init(LCD_DISP_ON);
lcd_clrscr();
while(1)
{
if(display == 1)
{
lcd_init(LCD_DISP_ON);
display = 0;
itoa(sekund,sek, 10);
itoa(minut,min, 10);
itoa(timme,tim, 10);
lcd_gotoxy(11,0);
lcd_puts(":");
lcd_gotoxy(8,0);
lcd_puts(":");
lcd_gotoxy(0,0);
lcd_puts("Time:");
if(sekund <=9)
{
lcd_gotoxy(14,0);
lcd_puts(" ");
lcd_gotoxy(13,0);
lcd_puts(sek);
lcd_gotoxy(12,0);
lcd_puts("0");
}
else
{
lcd_gotoxy(14,0);
lcd_puts(" ");
lcd_gotoxy(12,0);
lcd_puts(sek);
}
if(minut <=9)
{
lcd_gotoxy(10,0);
lcd_puts(min);
lcd_gotoxy(9,0);
lcd_puts("0");
}
else
{
lcd_gotoxy(9,0);
lcd_puts(min);
}
if(timme <=9)
{
lcd_gotoxy(7,0);
lcd_puts(tim);
lcd_gotoxy(6,0);
lcd_puts("0");
}
else
{
lcd_gotoxy(6,0);
lcd_puts(tim);
}
}
}
}
ISR(TIMER1_COMPA_vect)
{
display = 1;
sekund = sekund + 1;
if(sekund >=60)
{
sekund = 0;
minut = minut + 1;
}
if(minut >=60)
{
minut = 0;
timme = timme + 1;
}
if(timme >=24)
{
timme = 0;
}
}
Postat: 19 augusti 2008, 12:29:31
av blueint
Timer driven klocka kanske drar sig mindre?
Schema på klockdelen..?
LED 7-segment borde synas bättre på avstånd i ett mörkt sovrum.
Postat: 19 augusti 2008, 14:13:53
av 99nvbjed
blueint skrev:LED 7-segment borde synas bättre på avstånd i ett mörkt sovrum.
Eller kanske en OLED, de brukar kunne ge ett vackert gönt eller oranget (ful böjning av låneord...) sken i mörkret.
Bra idé i övrigt, ska nog också prova bygga en sån när jag har lite tid över, måste ju vara perfekt för en ATtiny...
OT:
electric_man skrev:Bilderna funkar utmärkt med en 40" skärm

Kan avslöja att bilderna funkar bra på min 13" också

Dags att öka gränsen till 8-900 kanske?
Postat: 19 augusti 2008, 14:47:43
av MicaelKarlsson
electric_man skrev:Bilderna funkar utmärkt med en 40" skärm

Intresseklubben noterar inspirerat......
Tack för koden Ranstam! Alltid kul att se hur andra löser problem.
Edit: Ranstam kör du helt utan indentering eller blev det så när du klistrade in koden?
Postat: 19 augusti 2008, 14:54:04
av MadModder
Forumet tar bort alla begynnande mellanslag och tabbar. Det blir bättre om man sätter in koden mellan code-tags.

Postat: 19 augusti 2008, 15:03:22
av Ranstam
Här kommer en ritning över själva kretsen. Kanske inte den bästa, men hoppas att ni kan se hur det är kopplat.
Det ska bli intressant att se hur den håller tiden över några veckor. Får nog koppla in en DC adapter isf...
//Alexander
Postat: 19 augusti 2008, 16:38:47
av MicaelKarlsson
Har du sett dessa app.notes:
http://atmel.com/dyn/resources/prod_doc ... oc2521.pdf
http://atmel.com/dyn/resources/prod_doc ... oc1619.pdf
Kan rekomenderas!
"Får nog koppla in en DC adapter isf"
Kan vara bra såvida du inte äger en batterifabrik!

Postat: 19 augusti 2008, 20:09:11
av gille
Nu kan jag ju inte jättemycket om AVR, men kan du inte skicka ner processorn i sleep mode mellan interrupten och bara uppdatera när du behöver det? Det lär ta ner strömförbrukningen.
Postat: 19 augusti 2008, 21:30:14
av Rohan
Det går alldeles utmärkt att lägga processorn i sleep-läge medans man väntar på hårdvaruavbrott. Kanske kan ge någon enstaka mA. Den stora boven i dramat är förmodligen displayen och särskilt dess backlight.
Postat: 20 augusti 2008, 16:11:56
av Ranstam
Jag funderade faktiskt lite på att köra med sleep-läge, men konstaterade också att det nog är backlighten som är den största förbrukaren.
Tack för länkarna till app.notes
Hade en gästföreläsare när jag pluggade, från ett företag som hette Dectron, som pratade om EMC och avstörning. Får se om jag kan använda lite av det i praktiken!
Ang. koden så har jag sett en del smidigare sätt att lösa det så att timmar/min/s och ":" kommer i rätt ordning. Dock lite färsk på C programering ännu.
Blev antagen till distansnöbörjarkurs i ansi-c som går till hösten. Hoppas det bättrar på mina kunskaper lite.
//Alexander