Načítanie obsahu eeprom Atmega 8.

Čaute, mám taký problém a to s načítaním obsahu eeprom.
V predchádzajucom programe mi to išlo bez problémov a teraz nie a nie.
Je niečo zlé v tomto programe? Prvé číslo mi načíta 65280 druhé 65535.
Podľa mňa je prvé číslo 1000 druhé tiež 1000.

[code]//**************** Nacitanie eeprom *********
uint16_t tmp;
uint8_t tmp1;

for(i=0; i<11; 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;
//********************************************

[/code]

Obsah pamäte eeprom.

00000000 E8 03 E8 03 E8 03 E8 03 E8 03 E8 03 2D FF FF FF
00000010 FF FF FF FF atd.

Žádnou závadu nevidím.
Zkontroluj však, jak máš definované i. Měl by to být alespoň int.
Pokud jej máš jako char, tak to bude ten problém.

Premenná i je int.

U mne to funguje.
ee.png

Aj u mňa v AVR studiu to funguje, ale v simulátore ISIS 7 to nejde. Ja potrebujem ten program odladiť v simulátore, to čítanie eeprom je len časť programu. Predchádzajúci program mi išiel v simulátore a aj na ostro.

Skúsil som to aj na ostro a nejde to.

Abychom ti pomohli, tak nam musis rict trochu vice.
Pokud si vytvoris pouze funkci cteni z eeprom tak ta ti funguje, nebo ne?
Pokud ano, chyba je nekde mimo program. Pokud ne, dej nekam komplet program na cteni eeprom abychom to zkoukli.

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]***