Odczyt eeprom atmegi 8 do komputera

Jesli jesteś początkującym elektronikiem, to tu z pewnością znajdziesz pomoc. Miejsce dobre do dyskusji nad podstawami elektroniki w zakresie teorii i praktyki.
ODPOWIEDZ
gravelet
-
Posty: 14
Rejestracja: 04 mar 2010, 15:53
Lokalizacja: Rybnik

Odczyt eeprom atmegi 8 do komputera

Post autor: gravelet » 17 sty 2012, 17:59

Witam

mam problem, zapisuję sobie do eeprom wartości temperatury. Potrafię odczytać plik eep za pomocą programatora USB oraz AVRdude ... tylko teraz jak sprawdzić co mi się w tym pliku zapisało ... najlepiej jak to przerobić na wartości przyjemne dla oka

stawiam browara za pomoc

Awatar użytkownika
Pikczu
Użytkownik
Posty: 754
Rejestracja: 18 lip 2005, 18:33
Lokalizacja: Dublin
Kontakt:

Post autor: Pikczu » 17 sty 2012, 19:32

Dobra teraz przeczytaj to co napisałeś co my z tego mamy wiedzieć ?
Napisz jakiego języka używasz do tych procków.
Jakiego typu jest zmienna która zapisujesz w pamięci.
I czy znasz adresy pod którymi zapisujesz dane w eeprom.
czy zapisujesz jeszcze jakieś inne dane do pamięci.
Na 99,9% jestem pewien ze nie jesteś autorem kodu który zapisuje do eeprom.

gravelet
-
Posty: 14
Rejestracja: 04 mar 2010, 15:53
Lokalizacja: Rybnik

Post autor: gravelet » 18 sty 2012, 11:09

Witam

Odczytuję wartość temperatury z czujnika DS18B20 i chciałbym ją zapisać w pierwszej komórce pamięci.

Ma to być rejestrator temperatury. Wiem, że teraz to tak nie działa, pierw chcę rozwiązać problem jednego zapisu do jednej komórki a później dodam pętle i inkrementację adresu.

Kod: Zaznacz cały

#include <stdio.h>
#include <avr/io.h>
#include <util/delay.h>
#include "hd44780.h"
#include "ds18b20.h"
#include <avr/eeprom.h>

char str[17]="   Termometr3   ";
int main(void)
{
  double temp;
  unsigned char ds18b20_pad[9];
  lcd_init();
  LCD_DISPLAY(LCDDISPLAY);  
  LCD_CLEAR;            
  LCD_LOCATE(0,0);
  lcd_puts(str);

  while(1)
  {
     if(ds18b20_ConvertT())
    {
		
       _delay_ms(750);
       ds18b20_Read(ds18b20_pad);
       temp = ((ds18b20_pad[1] << 8) + ds18b20_pad[0]) / 16.0 ;
	   eeprom_write_word( (uint8_t *)0x1, temp);
	   _delay_ms(200);
       sprintf(str,"%4.1f\xdf""C", temp);
       LCD_LOCATE(5,1);     
       lcd_puts(str);    
  }
}
}
Autorem odczytu nie jestem ja, ale program działa. Zapis dorobić chciałem samemu i korzystałem z książki AVR&ARM7 - programowanie mikrokontrolerów dla każdego. Jednak tam zapis do pamięci dla języka C jest ledwo liźnięty :/

Pamiętam o tym, że eeprom może być zapisany w ograniczonych ilościach cykli. To jest narazie model szkoleniowy i odpowiednie poprawki w kodzie prowadzę później.

Nie wiem, czy dane są zapisane poprawnie bo nie mam ich jak sprawdzić. Chciałbym mieć dostęp do nich od strony komputera. Programatorem mogę odczytać plik eep. z atmegi

Awatar użytkownika
Pikczu
Użytkownik
Posty: 754
Rejestracja: 18 lip 2005, 18:33
Lokalizacja: Dublin
Kontakt:

Post autor: Pikczu » 18 sty 2012, 22:19

To będize na pewno w hexie uint8_t to byte, każdy zapis to jedno okienko w pamięci eeprom.
Wystarczy odczytać zawartość jednej komórki pamięci.

Awatar użytkownika
Pikczu
Użytkownik
Posty: 754
Rejestracja: 18 lip 2005, 18:33
Lokalizacja: Dublin
Kontakt:

Post autor: Pikczu » 19 sty 2012, 22:32

A tak w ogóle to bez sensu zapisywać do eeprom i odczytywać z kompa.
Dopisz wysyłanie przez port szeregowy i będzie bez problemu, ewentualnie karta SD.
Pozdrawiam

ODPOWIEDZ