Načítanie obsahu eeprom Atmega 8.

Tu je ten program. Dnes som vytvoril nový projekt AVR Studiu a skopíroval som tento program do neho a čuduj sa, na ostro fungoval, ale v simulátore stále nejde. Neviem si to vysvetliť, mám AVR Studio 6.2, či niečo zblblo, je to zaujímavé. Stretol sa niekto s takýmto niečim ?

[code]
/*

  • Kotlik.c
  • Created: 6. 9. 2015 22:32:05
  • Author: Palo
    */

#define F_CPU 8000000UL

#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#include <avr/eeprom.h>
#include <stdlib.h>
#include <stdio.h>

#include “max7219.h”

unsigned int Read_ADC(unsigned char channel){
// vloz cislo kanala, vymaskuj nepouzite bity
ADMUX &= 0xF0;
ADMUX |= channel & 0x0F;
// start conversion
ADCSRA |= (1 << ADSC);
// cakaj na priznak skoncenia konverzie
while(ADCSRA & (1 << ADSC));
// navratova hodnota - vysledok ad prevodu
return ADC;
}

int main(void)
{

char text[9];
int tep, tepn, u, cer, i, kur, blok, pamet, teplota, roz;
int pozi, pok, pok1;
static int poz[6];

cer = 0;
kur = 0;
blok = 0;
roz = 0;
pok1 = 0;
pamet = 0;

//**************** Nacitanie eeprom *********
uint16_t tmp;
uint8_t tmp1;

for(i=0; i<12; i=i+2)
{
	tmp = eeprom_read_word((uint16_t*) i);
	poz(i/2)] = (int) tmp;
}
	
tmp1 = eeprom_read_byte((uint8_t*) 12);
teplota = (int) tmp1;
//********************************************

tepn = 5;
pamet = 90;

DDRB |= (1 << PB0) | (1 << PB1) | (1 << PB2) | (1 << PB3) | (1 <<PB4) | (1 << PB5);
PORTB &=~(1 << PB0) | (1 << PB1) | (1 << PB2) | (1 << PB3) | (1 <<PB4) | (1 << PB5);

DDRD &=~(1 << PD0) | (1 << PD1) | (1 << PD2);
PORTD |=(1 << PD0) | (1 << PD1) | (1 << PD2);

ADMUX |= (1 << REFS0);
ADCSRA |= (1 << ADEN) | (1 << ADIF) | (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0);

sei();

max7219_init();
max7219_intensity(1);

sprintf(text,"--AhoJ--");
max7219_clear();
m_write_(text, 8);
_delay_ms(2000);

//******************** Otvorenie klapky *****************************************
PORTB |= (1 << PB0);
// Nacitanie
pozi = Read_ADC(1);
// Kontrola
while(pozi < poz[5])
{
	pozi = Read_ADC(1);
}
// Odchod
PORTB &=~ (1 << PB0);
//*******************************************************************************
	
while(1)
{
	//******************** Nacitanie teploty a tolerancia ***********************
	pok = Read_ADC(0);

	if(pok1 >= (pok +2) || pok1 <= (pok -2)){
		pok1 = pok;
	}
	
	//************************** Vypocet teploty ********************************
	u = ((long)pok1*500/1024)+2;
	
	//************************** Zapnutie cerpadla ******************************
	if(cer == 0 && u > 34){
		PORTB |= (1 << PB2);
		kur = 1;
		PORTB &=~(1 << PB4);
		PORTB |= (1 << PB3);
		cer = 1;
		blok = 0;
	}
	
	//************************** Vypnutie cerpadla *******************************
	if(cer == 1 && u <31){
		PORTB &=~(1 << PB2);
		kur = 0;
		PORTB |= (1 << PB4);
		PORTB &=~(1 << PB3);
		cer = 0;
		blok = 1;
	}
	
	tep = teplota - u;
	
	//*************************** Odblokovanie pri rozhoreni ****************************
	if(blok == 1 && pamet < u){
		blok = 0;
		kur = 1;
		PORTB &=~(1 << PB4);
	}
	//***********************************************************************************
	
	if(kur == 1 && tep >= 0){
		if(tep > 5){
			if(roz == 1){
				kur = 0;
				PORTB |= (1 << PB4);
				PORTB &=~ (1 << PB3);
				blok = 1;
				pamet = u;
				goto asd;
			}
			tep = 5;
		}
		
		if(tep > tepn){
			
			pozi = Read_ADC(1);
			while(pozi < poz[tep]){
				PORTB |= (1 << PB0);
				pozi = Read_ADC(1);
			}
			PORTB &=~ (1 << PB0);
			tepn = tep;
			
		}
		if(tep < tepn){
			
			pozi = Read_ADC(1);
			while(pozi > poz[tep]){
				PORTB |= (1 << PB1);
				pozi = Read_ADC(1);
			}
			PORTB &=~ (1 << PB1);
			tepn = tep;
			
		}

		if(tep > 2){
			PORTB |= (1 << PB3);
		}
		
		if(tep < 3){
			PORTB &=~ (1 << PB3);
		}
		
	}
	asd:
	if(tep < 0){
		pozi = Read_ADC(1);
		while(pozi > poz[0]){
			PORTB |= (1 << PB1);
			pozi = Read_ADC(1);
		}
		PORTB &=~ (1 << PB1);
	}

	if(tep < 3)
	{
		roz = 1;
	}
	
	//*********************************** Tlacitko Menu ***************************************
	if((PIND & (1 << PD1)) == 0 && (PIND & (1 << PD2)) == 0)
	{
		i = 0;
		while (i < 6)
		{
			if((PIND & (1 << PD0)) == 0){
				i += 1;
				goto xxx;
			}
			if((PIND & (1 << PD1)) == 0){
				poz* += 1;
			}
			if((PIND & (1 << PD2)) == 0){
				poz* -= 1;
			}
			max7219_clear();
			sprintf(text,"%1d - %4d", i, poz*);
			m_write_(text, 8);
			xxx:
			_delay_ms(500);
		}
		for(i=0; i<11; i=i+2){
			eeprom_write_word((uint16_t*) i, (uint16_t) poz(i/2)]);
		}
	}
	
	//************************************* Tlac Start *****************************************
	if((PIND & (1 << PD0)) == 0){
		PORTB &=~(1 << PB4);
		kur = 1;
		roz = 0;
		blok = 0;
	}
	
	//************************************ Tlacitko + teplota ***********************************
	if((PIND & (1 << PD1)) == 0){
		if(teplota < 79){
			teplota += 1; //pridaj teplotu
		}
		roz = 0;
		eeprom_write_byte((uint8_t*) 12, (uint8_t) teplota);
	}
	
	//************************************* Tlacitko - teplota ***********************************
	if((PIND & (1 << PD2)) == 0){
		if(teplota > 35){
			teplota -= 1; //uber teplotu
		}
		eeprom_write_byte((uint8_t*) 12, (uint8_t) teplota);
	}
	
	//************************************* Vystup na Display ************************************
	
	sprintf(text," %2d%3d'C", teplota-2, u);
	if (roz == 1)
	{
		sprintf(text,"A%2d%3d'C", teplota-2, u);
	} 
	
	max7219_clear();
	m_write_(text, 8);
	
	PORTB ^= (1 << PB5); //neguj PB5
	_delay_ms(250);
	PORTB ^= (1 << PB5); //neguj PB5
	_delay_ms(250);
}
return 0;

}
[/code]***