fratello Postat August 6, 2012 Partajează Postat August 6, 2012 Aici este o schema grozava http://qsl.net/yo6pir/rtc.html .... Ca mai toate scheme de pe acel site...Felicitari si multumiri realizatorului ! Link spre comentariu
dorelb Postat August 6, 2012 Autor Partajează Postat August 6, 2012 Da, s-ar parea ca este cea mai rea schema de ceas care am vazut-o pana in prezent. Oricum multumesc mult tuturor care au vrut sa ma ajute. Aveam acest atmega16 care vroiam sa il folosesc la ceva . Poate imi da cineva niste sugestii. Oricum am pe breadboard un ceas foarte precis cu 16f628. Link spre comentariu
Vizitator Postat August 7, 2012 Partajează Postat August 7, 2012 Sper că nu ţi-a pierit entuziasmul pe motiv că a fost criticat ceasul.Ce era mai greu ai depăşit, l-ai făcut să meargă! Pune-i cuarţ, ca să fie precis, şi continuă experimentele.Toată satisfacţia în asta constă, să depăşeşti dificultăţile. După aceea, când te uiţi în urmă şi vezi, de unde ai plecat (o schemă şi un program, ambele cu greşeli) şi unde ai ajuns (un ceas care merge cum vrei tu), vei fi impresionat de realizarea ta.Greşelile (chiar dacă sunt făcută de altcineva) sunt cel mai bun profesor, din greşeli înveţi.Dă-i înainte, nu te opri. Link spre comentariu
dorelb Postat August 7, 2012 Autor Partajează Postat August 7, 2012 @RoGeorge . Multumesc pentru sfaturi, dar cum nu am mai programat un avr pana acum , cel mai bine ar fi sa imi arate cineva cum se face, si prin comparatie , sa invat si eu cate ceva in programare . M-am uitat de la pagia 117 dar nu imi dau seama de ce trebuie sa fac . Daca este dispus cineva sa imi arate mii de multumiri . Link spre comentariu
godFather89 Postat August 7, 2012 Partajează Postat August 7, 2012 Pentru inceput muta toate firele de pe PORTC pe PORTD si modifica codul sa foloseasca portul D in loc de C (DDRD in loc de DDRC, PORTD in loc de PORTC, etc.). Asta din cauza ca pinii PC6/PC7(TOSCx) sunt ocupati. Fiind tot portul liber, e mai usor sa muti toate firele de pe C pe D si modificarile in cod sunt minime.Dupa ce ai terminat (si functioneaza), leaga un cristal de quartz de 32.768 KHz la pinii PC6/PC7.Restul, dupa ce termini ce e mai sus. Link spre comentariu
dorelb Postat August 7, 2012 Autor Partajează Postat August 7, 2012 Am facut modificarile, si atasez mai jos fisierul . Daca poti sa-mi generezi hex-ul . Nu am AVR studio . Se pare ca nu am modificat : #define SegCntrlPin PINC cu #define SegCntrlPin PIND DigitalClock_c.TXT Link spre comentariu
Vizitator Postat August 7, 2012 Partajează Postat August 7, 2012 Întreb doar din curiozitate, de ce nu-ţi generezi singur hex-ul?AVR Studio este gratuit. Îl aduci de pe Internet, de la Atmel (nu-l lua de la alţii).Se instalează foarte uşor.Dacă n-ai mai făcut, nu-i problemă, se învaţă uşor şi asta. :dans:Doar să întrebi ce nu iese. Link spre comentariu
dorelb Postat August 7, 2012 Autor Partajează Postat August 7, 2012 Nu mai am spatiu pe HDD. Am descarcat AVRStudio 5, dar (memorie insuficienta). Link spre comentariu
dorelb Postat August 7, 2012 Autor Partajează Postat August 7, 2012 Am facut curatenie pe HDD. Am instalat AtmelStudio 6. Am rescris programul si am dat build. A generat hexul, ceasul merge, dar am ocupat pinii pentru reglat ceasul. Link spre comentariu
godFather89 Postat August 7, 2012 Partajează Postat August 7, 2012 Si nu poti regla ceasul cu PD6/PD7? Link spre comentariu
dorelb Postat August 7, 2012 Autor Partajează Postat August 7, 2012 Nu, nu se poate. Am incercat. Link spre comentariu
Vizitator Postat August 7, 2012 Partajează Postat August 7, 2012 Ai activat pull-up rezistors pentru pinii cu butoanele? Link spre comentariu
dorelb Postat August 7, 2012 Autor Partajează Postat August 7, 2012 Scuze. Eram pe USBasp . Acum merge . Ramane de vazut daca are precizie mai mare . Este normal sa functioneze fara quart ? Link spre comentariu
godFather89 Postat August 7, 2012 Partajează Postat August 7, 2012 precizie mai mare nu are cum sa aibe inca. Mai trebuie modificat softul sa foloseasca quartz-ul de pe TOSC1/2. Link spre comentariu
godFather89 Postat August 8, 2012 Partajează Postat August 8, 2012 Incearca cu codul de mai jos: /* * DigitalClock.c * Written in AVR Studio 5 * Compiler: AVR GNU C Compiler (GCC) * * Created: 12/10/2011 1:17:19 PM * Author: AVR Tutorials * Website: www.AVR-Tutorials.com */ #define F_CPU 4000000UL#include <avr/io.h>#include <avr/interrupt.h>#include <util/delay.h> #define SegDataPort PORTB#define SegDataPin PINB#define SegDataDDR DDRB #define SegCntrlPort PORTD#define SegCntrlPin PIND#define SegCntrlDDR DDRD /*Global Variables Declarations*/volatile uint8_t hours = 0;volatile uint8_t minutes = 0;volatile uint8_t seconds = 0; /*Function Declarations*//*****************************************************************************//*Decimal Digit (0-9) to Seven Segment Values Encoder*/uint8_t DigitTo7SegEncoder(uint8_t digit, uint8_t common); /*Main Program*//*****************************************************************************/int main(void){ SegDataDDR = 0xFF; SegCntrlDDR = 0x3F; SegCntrlPort = 0xFF; TCCR2 = 0x00; //stop timer ASSR = 0x08; //enable async mode TCNT2 = 0x00; //init CNT TCCR2 = 0x05; //128 prescaler (start timer) TIMSK = 0x40; //enable timer2 overflow interrupt sei(); while(1) { /* Set Minutes when SegCntrl Pin 6 Switch is Pressed*/ if ((SegCntrlPin & 0x40) == 0) { _delay_ms(200); if(minutes < 59) minutes++; else minutes = 0; } /* Set Hours when SegCntrl Pin 7 Switch is Pressed*/ if ((SegCntrlPin & 0x80) == 0) { _delay_ms(200); if (hours < 23) hours++; else hours = 0; } SegDataPort = DigitTo7SegEncoder(seconds%10,1); SegCntrlPort = ~0x01 | 0xC0; SegDataPort = DigitTo7SegEncoder(seconds/10,1); SegCntrlPort = ~0x02 | 0xC0; SegDataPort = DigitTo7SegEncoder(minutes%10,1); SegCntrlPort = ~0x04 | 0xC0; SegDataPort = DigitTo7SegEncoder(minutes/10,1); SegCntrlPort = ~0x08 | 0xC0; SegDataPort = DigitTo7SegEncoder(hours%10,1); SegCntrlPort = ~0x10 | 0xC0; SegDataPort = DigitTo7SegEncoder(hours/10,1); SegCntrlPort = ~0x20 | 0xC0; } return 0;} /** Function Description:* Encode a Decimal Digit 0-9 to its Seven Segment Equivalent.** Function Arguments:* digit - Decimal Digit to be Encoded* common - Common Anode (0), Common Cathode(1)* SegVal - Encoded Seven Segment Value ** Connections:* Encoded SegVal is return in the other G-F-E-D-C-B-A that is A is the least* significant bit (bit 0) and G bit 6.*/uint8_t DigitTo7SegEncoder(uint8_t digit, uint8_t common){ uint8_t SegVal = 0; switch(digit) { case 0: if(common == 1) SegVal = 0b00111111; else SegVal = ~0b00111111; break; case 1: if(common == 1) SegVal = 0b00000110; else SegVal = ~0b00000110; break; case 2: if(common == 1) SegVal = 0b01011011; else SegVal = ~0b01011011; break; case 3: if(common == 1) SegVal = 0b01001111; else SegVal = ~0b01001111; break; case 4: if(common == 1) SegVal = 0b01100110; else SegVal = ~0b01100110; break; case 5: if(common == 1) SegVal = 0b01101101; else SegVal = ~0b01101101; break; case 6: if(common == 1) SegVal = 0b01111101; else SegVal = ~0b01111101; break; case 7: if(common == 1) SegVal = 0b00000111; else SegVal = ~0b00000111; break; case 8: if(common == 1) SegVal = 0b01111111; else SegVal = ~0b01111111; break; case 9: if(common == 1) SegVal = 0b01101111; else SegVal = ~0b01101111; } return SegVal;} /*Timer Counter 1 Compare Match A Interrupt Service Routine/Interrupt Handler*/ISR(TIMER2_OVF_vect){ if(++seconds == 60) { seconds = 0; if(++minutes == 60) { minutes = 0; if (++hours > 23) hours = 0; } }} Link spre comentariu
Postări Recomandate
Creează un cont sau autentifică-te pentru a adăuga comentariu
Trebuie să fi un membru pentru a putea lăsa un comentariu.
Creează un cont
Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!
Înregistrează un nou contAutentificare
Ai deja un cont? Autentifică-te aici.
Autentifică-te acum