hodiny v C-čku Zavlažovací automat.
Moderátori: psichac, Moderátori
-
- Pokročilý člen
- Príspevky: 770
- Dátum registrácie: 13 Okt 2007, 00:00
- Bydlisko: Levice
- Vek: 38
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.
- petersno
- Ultimate člen
- Príspevky: 2774
- Dátum registrácie: 06 Aug 2011, 00:00
- Bydlisko: ba
- Vek: 63
-
- Pokročilý člen
- Príspevky: 770
- Dátum registrácie: 13 Okt 2007, 00:00
- Bydlisko: Levice
- Vek: 38
-
- Nový člen
- Príspevky: 54
- Dátum registrácie: 29 Mar 2009, 00:00
- Bydlisko: Prievidza
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
-
- Pokročilý člen
- Príspevky: 770
- Dátum registrácie: 13 Okt 2007, 00:00
- Bydlisko: Levice
- Vek: 38
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
-
- Ultimate člen
- Príspevky: 1738
- Dátum registrácie: 11 Máj 2008, 00:00
- Bydlisko: Námestovo
- Vek: 34
- Radus
- Zaslúžilý člen
- Príspevky: 1497
- Dátum registrácie: 27 Okt 2009, 00:00
- Bydlisko: Prešov
- Vek: 42
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
-
- Pokročilý člen
- Príspevky: 770
- Dátum registrácie: 13 Okt 2007, 00:00
- Bydlisko: Levice
- Vek: 38
- Radus
- Zaslúžilý člen
- Príspevky: 1497
- Dátum registrácie: 27 Okt 2009, 00:00
- Bydlisko: Prešov
- Vek: 42
Re: hodiny v C-čku
preco volas funkcu LCD_update_time() raz z prerusenia a stale zo slucky v MAIN? Pre istotu?
0
-
- Pokročilý člen
- Príspevky: 770
- Dátum registrácie: 13 Okt 2007, 00:00
- Bydlisko: Levice
- Vek: 38
- Radus
- Zaslúžilý člen
- Príspevky: 1497
- Dátum registrácie: 27 Okt 2009, 00:00
- Bydlisko: Prešov
- Vek: 42
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
-
- Pokročilý člen
- Príspevky: 770
- Dátum registrácie: 13 Okt 2007, 00:00
- Bydlisko: Levice
- Vek: 38
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
- petersno
- Ultimate člen
- Príspevky: 2774
- Dátum registrácie: 06 Aug 2011, 00:00
- Bydlisko: ba
- Vek: 63
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
- Radus
- Zaslúžilý člen
- Príspevky: 1497
- Dátum registrácie: 27 Okt 2009, 00:00
- Bydlisko: Prešov
- Vek: 42
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
-
- Pokročilý člen
- Príspevky: 770
- Dátum registrácie: 13 Okt 2007, 00:00
- Bydlisko: Levice
- Vek: 38
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
- petersno
- Ultimate člen
- Príspevky: 2774
- Dátum registrácie: 06 Aug 2011, 00:00
- Bydlisko: ba
- Vek: 63
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
- Radus
- Zaslúžilý člen
- Príspevky: 1497
- Dátum registrácie: 27 Okt 2009, 00:00
- Bydlisko: Prešov
- Vek: 42
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
- petersno
- Ultimate člen
- Príspevky: 2774
- Dátum registrácie: 06 Aug 2011, 00:00
- Bydlisko: ba
- Vek: 63
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
- Radus
- Zaslúžilý člen
- Príspevky: 1497
- Dátum registrácie: 27 Okt 2009, 00:00
- Bydlisko: Prešov
- Vek: 42
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
-
- Pokročilý člen
- Príspevky: 770
- Dátum registrácie: 13 Okt 2007, 00:00
- Bydlisko: Levice
- Vek: 38
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í
- 2983 Zobrazení
-
Posledný príspevok od používateľa pablox