hodiny v C-čku Zavlažovací automat.
Moderátori: psichac, Moderátori
hodiny v C-čku Zavlažovací automat.
Nazdar.
Nemáte prosím niekto program hodín v C++ na atmega 8 a lcd ,alebo pdobnu atmegu?
Na nete nachadzam len v assembleri. Možno zle hladam dakujem.
Nemáte prosím niekto program hodín v C++ na atmega 8 a lcd ,alebo pdobnu atmegu?
Na nete nachadzam len v assembleri. Možno zle hladam dakujem.
0
Naposledy upravil/-a Mahel v 04 Apr 2013, 20:26, upravené celkom 1 krát.
Re: hodiny v C-čku
Skús pozrieť tu a rtc z programu vyhoď :http://www.urel.feec.vutbr.cz/MIA/2010/ ... index.html
0
Re: hodiny v C-čku
Nazdar.
Tak niečo som skúsil spraviť ,ale problém je že čas sa rosipe aj ked na začiatku to je ok.
Na obrázku je ako to mám zapojene a je tam aj ako sa to rozpadne.
Tak niečo som skúsil spraviť ,ale problém je že čas sa rosipe aj ked na začiatku to je ok.
Na obrázku je ako to mám zapojene a je tam aj ako sa to rozpadne.
Kód: Vybrať všetko
#define F_CPU 4000000UL
#include <avr/io.h> //Knihovna vstupov a výstupov
#include "lcd.h" //Knihovna LCD
#include <avr/interrupt.h> //Knihovna přerušení
unsigned char hours = 0; //Globalne premenne pre čas.
unsigned char minutes = 0;
unsigned char seconds = 0;
char time[] = "00:00:00";
ISR(TIMER1_COMPA_vect) //Preušenie
{
seconds++;
if(seconds == 60)
{
seconds = 0;
minutes++;
}
if(minutes == 60)
{
minutes = 0;
hours++;
}
if(hours > 23)
hours = 0;
LCD_update_time();
}
void LCD_update_time()
{
unsigned char temp;
lcd_gotoxy(4,0);
itoa(hours/10,temp,10);
lcd_puts(temp);
itoa(hours%10,temp,10);
lcd_puts(temp);
lcd_puts(":");
itoa(minutes/10,temp,10);
lcd_puts(temp);
itoa((minutes%10),temp,10);
lcd_puts(temp);
lcd_puts(":");
itoa(seconds/10,temp,10);
lcd_puts(temp);
itoa(seconds%10,temp,10);
lcd_puts(temp);
}
int main(){
TCCR1B = (1<<CS12|1<<WGM12);
OCR1A = 15625-1;
TIMSK = 1<<OCIE1A;
sei(); //Povol prerušenia.
lcd_init(LCD_DISP_ON);
lcd_gotoxy(4,0); // chod na poziciu x=4, y=0 // inicializacia displeja
lcd_puts(time); //vypis text
while(1)
{
LCD_update_time();
}
return 0;
}
0
Re: hodiny v C-čku
... pridaj k tomu obvod RTC, budeš to mať omnoho jednoduchšie... napr. starý známy PCF8563.
Zhlobiť ti niečo?
Zhlobiť ti niečo?
0
Re: hodiny v C-čku
preco volas funkcu LCD_update_time() raz z prerusenia a stale zo slucky v MAIN? Pre istotu?
0
Re: hodiny v C-čku
aj ja ... a prečo tam nexces prasknut to PCFko? Zda sa mi to elegantnejsie...
.. a to vypisovanie nemusis robit po cisliciach, mozes to kludne vypisat spolu. Akurat premennu temp definuj ako retazec
unsigned char temp [2];
a nasledne:
itoa(hours,temp,10);
lcd_puts(temp);
lcd_puts(":");
skus...
.. a to vypisovanie nemusis robit po cisliciach, mozes to kludne vypisat spolu. Akurat premennu temp definuj ako retazec
unsigned char temp [2];
a nasledne:
itoa(hours,temp,10);
lcd_puts(temp);
lcd_puts(":");
skus...
0
Re: hodiny v C-čku
To Radus: To PCFko nepotrebujem na skúšanie. Doma ho nemám a kupovať sa mi zatial nechce.
Tu premennú myslíš nejako takto? Lebo ked to dám takto tak sa mi zmení formát z 00:00:00 na 0:0:0.
Tu premennú myslíš nejako takto? Lebo ked to dám takto tak sa mi zmení formát z 00:00:00 na 0:0:0.
Kód: Vybrať všetko
void LCD_update_time()
{
unsigned char temp [2];
lcd_gotoxy(4,0);
itoa(hours,temp,10);
lcd_puts(temp);
lcd_puts(":");
itoa(minutes,temp,10);
lcd_puts(temp);
lcd_puts(":");
itoa(seconds,temp,10);
lcd_puts(temp);
}
0
Re: hodiny v C-čku
pri itoa samozrejme. a pri prechode z 9 na 10 sa ti bude text natahovat, opacne zase skracovat. bud musis pri cislach 0-9 doplnat "prednu" nulu, alebo namiesto itoa pouzi sprinf
0
Re: hodiny v C-čku
... ja osobne sprinf nepouzivam, pridavam tam este podmienku tusim...
itoa(minutes,temp,10);
if (!temp[1]) lcd_putsf ("0");
lcd_puts(temp);
nieco take
itoa(minutes,temp,10);
if (!temp[1]) lcd_putsf ("0");
lcd_puts(temp);
nieco take
0
Re: hodiny v C-čku
Tak takto to už ide normálne. Hladám aj niečo o tom sprinf ale zatial žiaden normálny príklad som nenašiel.
Kód: Vybrať všetko
void LCD_update_time()
{
unsigned char temp [2];
lcd_gotoxy(4,0);
itoa(hours,temp,10);
if (!temp[1]) lcd_puts ("0");
lcd_puts(temp);
lcd_puts(":");
itoa(minutes,temp,10);
if (!temp[1]) lcd_puts ("0");
lcd_puts(temp);
lcd_puts(":");
itoa(seconds,temp,10);
if (!temp[1]) lcd_puts ("0");
lcd_puts(temp);
}
0
Re: hodiny v C-čku
alebo takto :
if ( minutes <= 9 ) {
strcpy ( temp, '0' );
itoa ( minutes, temp+1, 10 );
else {
itoa ( minutes, temp, 10 );
}
lcd_puts ( temp );
inak pri viac ako jednom znaku v "temp" bude s takto deklarovanym "temp" problem
if ( minutes <= 9 ) {
strcpy ( temp, '0' );
itoa ( minutes, temp+1, 10 );
else {
itoa ( minutes, temp, 10 );
}
lcd_puts ( temp );
inak pri viac ako jednom znaku v "temp" bude s takto deklarovanym "temp" problem
0
Re: hodiny v C-čku
... aky problem? Momentalne, kedze sa predpoklada len dvojmiestne cislo je temp definovany ako pole o dvoch prvkoch, pri viacmiestnom cisle zvacsis pole.Pri tom vypise na to musis zamozrejme mysliet a rozsirit podmienku...nic zlozite v tom nieje...
0
Re: hodiny v C-čku
nieje v cecku string vzdy ukonceny null ? ak ano, potom pre n miestne cislo potrbujes n + 1 miestne pole. inak budu funkcie ako itoa pri dvojmiestnom cisle zapisovat null uz mimo pole. a to je nezdrave
0
Re: hodiny v C-čku
Dobre vravis ...ako nad tym rozmyslam, pri vysielani retazca na LCD je potom podmieneny cyklus ktory ide az po nulovy znak...
popravde ja to pole definujem stale s rezervou aj 6 miestne.... tak temp[3]...
popravde ja to pole definujem stale s rezervou aj 6 miestne.... tak temp[3]...
0
Re: hodiny v C-čku
Vedeli bi ste mi poradit ako sa dá zmazať na LCD len spodný riadok ked ho chcem prepisovať? Ked dám LCD_clrscr tak sa zmaze celi displej.
Ja potrebujem na hornom riadku stale hodiny bez toho prebliknutia pri zmazani a na spodnom potrebujem text torí budem prepisovať stlačením tlačidla. Ked nepoužiem ldc_clrs tak tam ostanu znaky z predosleho textu. Je na to nejaka funkcia? Či to mám mazať len medzerou.
Ja potrebujem na hornom riadku stale hodiny bez toho prebliknutia pri zmazani a na spodnom potrebujem text torí budem prepisovať stlačením tlačidla. Ked nepoužiem ldc_clrs tak tam ostanu znaky z predosleho textu. Je na to nejaka funkcia? Či to mám mazať len medzerou.
0
-
- Podobné témy
- Odpovedí
- Zobrazení
- Posledný príspevok
-
- 34 Odpovedí
- 3287 Zobrazení
-
Posledný príspevok od používateľa pablox