Mega8 som startar om hela tiden

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
anda
Inlägg: 91
Blev medlem: 29 juni 2008, 20:17:21
Ort: Västerås

Mega8 som startar om hela tiden

Inlägg av anda »

Tjo!

Sitter o pillar lite med en atmega8 men den envisas med att starta om hela tiden.
Projektet är en klocka. Använder interna klockan. 4-st sjusegments displayer som är charlie plexade för att visa tiden.

Timer1 ska användas för att räkna sekunder
Timer2 används för att updatera displayen.

Schema.
http://dl.dropbox.com/u/213189/charlie.pdf
Änsålänge drivs hela klockan av programmeraren, stk500v2.

Allting är ihoplött på en bit experimentkort.

Problemen då? Som det står i rubriken så verkar jag så startar megan om hela tiden. Har jag missat något i koden(finns nedan)? Jag har läst som attans i databladet om timers men kan inte se något. Bör jag koppla matningen o reset annorlunda? Eller gör jag något helt annat fel?

Kod.

Kod: Markera allt

/*
 * main.c
 *
 *  Created on: Mar 28, 2010
 *      Author: anders
 */

#include <inttypes.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
/*	 _		 2
 *  | |		1 3
 *   _		 0
 *
 *  | |		4 6
 *   _ 		 5
 */
uint8_t seconds=55;
uint8_t onemin=9;
uint8_t tenmin=59;
uint8_t onehour=9;
uint8_t tenhour=1;

uint8_t numbers[] = { 0x7E, 0x48, 0x3D, 0x6D, 0x4B, 0x67, 0x77, 0x4C, 0x7F,
		0x4F, 0x5F, 0x73, 0x36, 0x79, 0x37, 0x17 };

int main() {

        // För att se att den resetar på ocilloskop
	DDRD=0x20;
	PORTD=0x20;
	_delay_us(200);
	PORTD=0x00;
	DDRD=0x00;

	// timer 2 används för displayen
	TIMSK |= 1 << OCIE2; //interrupt enable
	TCCR2 |= (1 << CS01) | (1 << CS00); // prescale 64 timer0
	OCR2 = 40; //TODO stäm av detta senare vilken frekvens som blir bra

	// timer 1 används för sekund tick
	TCCR1B |= (1 << WGM12); // CTC mode
	TIMSK |= (1 << OCIE1A); // CTC interrupt
	TCCR1B |= ((1 << CS10) | (1 << CS11)); // Fcpu/64
	OCR1A = 15624; // 15624 ger 1Hz at 1MHz prescaler 64

	//  Enable global interrupts
	sei();

	while (1) {}
}

ISR(TIMER1_COMPA_vect)
{      //Sekunderna på enminutsdisplayen
	DDRD=0x80 | numbers[seconds];
	PORTD= 		numbers[seconds];
	DDRC=		numbers[seconds];
	PORTC=		numbers[seconds];

	seconds++;
	/*
	if (seconds >= 60) {
		seconds = 0;
		onemin++;
	}
	if (onemin >= 10) {
		onemin = 0;
		tenmin++;
	}
	if (tenmin >= 6) {
		tenmin = 0;
		onehour++;
	}
	if (onehour >= 10) {
		onehour = 0;
		tenhour++;
	}
	if (tenhour >= 2 && onehour >= 4) {
		tenhour = 0;
		onehour = 0;
	}*/
}

ISR(TIMER2_COMP_vect)
{
	TCNT2=0; // Reset timer to 0
	// Display
	static uint8_t disp=0;
	disp++;

// Används ej än så länge
/*	switch (0) {
	case 0:
		DDRD = 0x8F;
		PORTC = 0x0F;
		PORTD = 0x40;
		disp++; //TODO increase
		PORTD=0x02;
		break;
	case 1:
		DDRD = 0x02;
		PORTC = (numbers[tenmin] << 2) | (numbers[tenmin] >> 6);
		disp++;
		break;
	case 2:
		DDRC = 0x04;
		PORTC = (numbers[onehour] << 3) | (numbers[onehour] >> 5);
		disp++;
		break;
	case 3:
		DDRC = 0x08;
		PORTC = (numbers[tenhour] << 4) | (numbers[tenhour] >> 4);
		disp = 0;
		break;
	}
	*/
}
Som en sidonot kan jag meddela att man blir lite tokig på att koppla ihop charlieplexingen rätt men det är ett annat problem =)

mvh
Anders
Användarvisningsbild
atmelfan
Inlägg: 255
Blev medlem: 5 maj 2010, 17:59:36
Ort: iggesund

Re: Mega8 som startar om hela tiden

Inlägg av atmelfan »

Hur har du kopplat reset?
Den ska vara kopplad till VCC via ett 10Kohm motstånd och en avkoppling kondensator (100nf?) till GND.
eqlazer
Inlägg: 923
Blev medlem: 22 september 2007, 13:53:45
Ort: Göteborg

Re: Mega8 som startar om hela tiden

Inlägg av eqlazer »

Hur ofta startar den om?
Användarvisningsbild
Swech
EF Sponsor
Inlägg: 4750
Blev medlem: 6 november 2006, 21:43:35
Ort: Munkedal, Sverige (Sweden)
Kontakt:

Re: Mega8 som startar om hela tiden

Inlägg av Swech »

Du MÅSTE ha matning även till AVCC trots att du inte använder ADn...

Swech
anda
Inlägg: 91
Blev medlem: 29 juni 2008, 20:17:21
Ort: Västerås

Re: Mega8 som startar om hela tiden

Inlägg av anda »

@atmelfan

Ska lägga till kondensatorn.

@eqlazer

den går i 7 ms innan den startar om.

@swech

ska lägga till det.
hornfeldt
Inlägg: 104
Blev medlem: 6 maj 2008, 00:27:07
Ort: Örnsköldsvik

Re: Mega8 som startar om hela tiden

Inlägg av hornfeldt »

det är inte så att du har råkat aktiverat watchdogen ?
anda
Inlägg: 91
Blev medlem: 29 juni 2008, 20:17:21
Ort: Västerås

Re: Mega8 som startar om hela tiden

Inlägg av anda »

hornfeldt:

Jag hade visst det. 6.5 ms är ju ett fullt 1 bitars register. Jag hade också helt glömt bort att det ens finns en watchdog =).
Hur bra skulle det gå om man inte hade ett forum att fråga? hehe.

Tack.
Skriv svar