hodiny v C-čku Zavlažovací automat.

C,C++,C#

Moderátori: psichac, Moderátori

Mahel
Pokročilý člen
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.

Príspevok od používateľa Mahel » 01 Apr 2013, 09:19

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.
0
Naposledy upravil/-a Mahel v 04 Apr 2013, 20:26, upravené celkom 1 krát.

Používateľov profilový obrázok
petersno
Ultimate člen
Ultimate člen
Príspevky: 2774
Dátum registrácie: 06 Aug 2011, 00:00
Bydlisko: ba
Vek: 63

Re: hodiny v C-čku

Príspevok od používateľa petersno » 01 Apr 2013, 09:30

0

Mahel
Pokročilý člen
Pokročilý člen
Príspevky: 770
Dátum registrácie: 13 Okt 2007, 00:00
Bydlisko: Levice
Vek: 38

Re: hodiny v C-čku

Príspevok od používateľa Mahel » 01 Apr 2013, 09:57

Dakujem ti ,ale ja to potrebujem na LCD 2x16 znakov.
0

jester
Nový člen
Nový člen
Príspevky: 54
Dátum registrácie: 29 Mar 2009, 00:00
Bydlisko: Prievidza

Re: hodiny v C-čku

Príspevok od používateľa jester » 01 Apr 2013, 10:57

Skús pozrieť tu a rtc z programu vyhoď :http://www.urel.feec.vutbr.cz/MIA/2010/ ... index.html
0

Mahel
Pokročilý člen
Pokročilý člen
Príspevky: 770
Dátum registrácie: 13 Okt 2007, 00:00
Bydlisko: Levice
Vek: 38

Re: hodiny v C-čku

Príspevok od používateľa Mahel » 01 Apr 2013, 21:08

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.

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;
}
Prílohy
hod.jpg
0

martin63
Ultimate člen
Ultimate člen
Príspevky: 1738
Dátum registrácie: 11 Máj 2008, 00:00
Bydlisko: Námestovo
Vek: 34

Re: hodiny v C-čku

Príspevok od používateľa martin63 » 01 Apr 2013, 21:18

ber to aj tak, že simulácia ti môže ukazovať niečo iné.
0

Používateľov profilový obrázok
Radus
Zaslúžilý člen
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

Príspevok od používateľa Radus » 01 Apr 2013, 21:23

... pridaj k tomu obvod RTC, budeš to mať omnoho jednoduchšie... napr. starý známy PCF8563.
Zhlobiť ti niečo?
0

Mahel
Pokročilý člen
Pokročilý člen
Príspevky: 770
Dátum registrácie: 13 Okt 2007, 00:00
Bydlisko: Levice
Vek: 38

Re: hodiny v C-čku

Príspevok od používateľa Mahel » 01 Apr 2013, 21:37

Ukazuje to simulacia a aj naživo na nepajivom poli.
0

Používateľov profilový obrázok
Radus
Zaslúžilý člen
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

Príspevok od používateľa Radus » 01 Apr 2013, 21:51

preco volas funkcu LCD_update_time() raz z prerusenia a stale zo slucky v MAIN? Pre istotu? :)
0

Mahel
Pokročilý člen
Pokročilý člen
Príspevky: 770
Dátum registrácie: 13 Okt 2007, 00:00
Bydlisko: Levice
Vek: 38

Re: hodiny v C-čku

Príspevok od používateľa Mahel » 01 Apr 2013, 22:01

Vďaka už to ide ako má ešte sa len učím. :D
0

Používateľov profilový obrázok
Radus
Zaslúžilý člen
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

Príspevok od používateľa Radus » 01 Apr 2013, 22:05

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...
0

Mahel
Pokročilý člen
Pokročilý člen
Príspevky: 770
Dátum registrácie: 13 Okt 2007, 00:00
Bydlisko: Levice
Vek: 38

Re: hodiny v C-čku

Príspevok od používateľa Mahel » 02 Apr 2013, 09:07

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.

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

Používateľov profilový obrázok
petersno
Ultimate člen
Ultimate člen
Príspevky: 2774
Dátum registrácie: 06 Aug 2011, 00:00
Bydlisko: ba
Vek: 63

Re: hodiny v C-čku

Príspevok od používateľa petersno » 02 Apr 2013, 09:15

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

Používateľov profilový obrázok
Radus
Zaslúžilý člen
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

Príspevok od používateľa Radus » 02 Apr 2013, 09:31

... ja osobne sprinf nepouzivam, pridavam tam este podmienku tusim...

itoa(minutes,temp,10);
if (!temp[1]) lcd_putsf ("0");
lcd_puts(temp);

nieco take :)
0

Mahel
Pokročilý člen
Pokročilý člen
Príspevky: 770
Dátum registrácie: 13 Okt 2007, 00:00
Bydlisko: Levice
Vek: 38

Re: hodiny v C-čku

Príspevok od používateľa Mahel » 02 Apr 2013, 09:42

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

Používateľov profilový obrázok
petersno
Ultimate člen
Ultimate člen
Príspevky: 2774
Dátum registrácie: 06 Aug 2011, 00:00
Bydlisko: ba
Vek: 63

Re: hodiny v C-čku

Príspevok od používateľa petersno » 02 Apr 2013, 09:46

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
0

Používateľov profilový obrázok
Radus
Zaslúžilý člen
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

Príspevok od používateľa Radus » 02 Apr 2013, 12:17

... 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

Používateľov profilový obrázok
petersno
Ultimate člen
Ultimate člen
Príspevky: 2774
Dátum registrácie: 06 Aug 2011, 00:00
Bydlisko: ba
Vek: 63

Re: hodiny v C-čku

Príspevok od používateľa petersno » 02 Apr 2013, 12:39

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

Používateľov profilový obrázok
Radus
Zaslúžilý člen
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

Príspevok od používateľa Radus » 02 Apr 2013, 13:18

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]... :)
0

Mahel
Pokročilý člen
Pokročilý člen
Príspevky: 770
Dátum registrácie: 13 Okt 2007, 00:00
Bydlisko: Levice
Vek: 38

Re: hodiny v C-čku

Príspevok od používateľa Mahel » 03 Apr 2013, 09:05

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.
0

Napísať odpoveď
  • Podobné témy
    Odpovedí
    Zobrazení
    Posledný príspevok