Sari la conținut
ELFORUM - Forumul electronistilor

ATMega16 - ajutor


dorelb

Postări Recomandate

  • Răspunsuri 68
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • dorelb

    33

  • godFather89

    13

  • fratello

    5

  • nickrvl

    1

Top autori în acest subiect

Imagini postate

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.

post-38484-139829471679_thumb.jpg

Link spre comentariu

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ă! :dans: 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. :da

Link spre comentariu

@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

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

Î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

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

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

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 cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum



×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări