Programator Pamięci EEPROM


6.5
Ocena: None Średnia: 6.5 (2 głosujących)

Układ służy do zapisywania danych w pamięci szeregowej eeprom typu AT24Cxx z wykorzystaniem portu szeregowego komputera PC. W podstawowej wersji można programować pamięci od AT24C32 do AT24C1024. Gdyby zaszła potrzeba można rozbudować program tego urządzenia o procedury zawarte tutaj. Urządzenie działa w oparciu o mikrokontroler ATTINY2313 dzięki czemu może komunikować się z komputerem wykorzystując prosty interfejs zbudowany na dwóch tranzystorach. Do komunikacji z programatorem można wykorzystać dowolną aplikację mogącą wysyłać liczby binarne na port RS-232, albo nawet skrypt powłoki. (pod linux'em).

Działanie:


Schemat ideowy programatora przedstawia poniższy rysunek:

Sercem programatora jest mikrokontroler U1 (AT90S2313 lub ATTINY2313) wraz z rezonatorem kwarcowym X1 (4MHz) i dwoma kondensatorami C1 (33pF) i C2 (33pF). Tranzystory T1 (BC557) i T2 (BC547) wraz z rezystorami R1 - R3 (10k) stanowią prosty interfejs RS232. Układ U3 (AT24C256) to pamięć eeprom 256kbit. Jest ona podłączona do magistrali I2C zdefiniowanej na wyprowadzeniach PD.5 i PD.6 procesora. Rezystory R13 (3,3k) i R14 (3,3k) podciągają magistralę do plusa zasilania. Kondensator C3 (47uF) filtruje napięcie zasilające. Dioda D1 wraz z rezystorem R12 (330R) ograniczającym jej prąd stanowi kontrolkę zasilania. Element prog to złącze programujące. Rezystory R5 - R8 (330R) stanowią dodatkowe zabezpieczenie mikrokontrolera podczas programowania. Diody D2 i D3 wraz z rezystorami R9 - R11 (330R) sygnalizują stan urządzenia. Złącze Com1 (DB9F) zapewnia kontakt z płytą główną komputera PC.

Budowa:


Urządzenie można zbudować na dostępnej tutaj płytce drukowanej. Rysunek w odbiciu lustrzanym można ściągnąć tutaj. Montaż układu nie jest skomplikowany, należy go rozpocząć od wlutowania jednej zworki. Kolejność pozostałych elementów jest dowolna za wyjątkiem R13, który musi być wlutowany przed podstawką na mikrokontroler. Pod pamięć eeprom konieczna jest podstawka, najlepiej precyzyjna. Diodę dwukolorową D2 (trzy nóżki, wspólna anoda) można zastąpić dwunóżkową (dwukolorowa z przeciwsobnym połączeniem struktur świecących) lutując ją w dwa skrajne wyprowadzenia w miejscu diody trójnóżkowej. Zamiast rezystora R9 w takim wypadku należy zastosować zworę. Do zasilania programatora wygodnie jest wykorzystać port USB. Układ podłączony jest do komputera za pomocą kabla DB9F-DB9M (Przedłużka do portu com) lub wpięty bezpośrednio do płyty głównej. Pomocą przy konstrukcji może okazać się schemat montażowy dostępny tutaj.

Wykaz Elementów:


1x Listwa Gold Pin 1x2
1x Złącze szufladkowe na goldpin 1x8
1x DB9F do druku

8x 330R
2x 3,3k
3x 10k

2x 33pF
1x 47uF Elektrolit

1x Rezonator Kwarcowy 4MHz
1x Dioda LED 2 kolory
2x Dioda LED
1x 90S2313 lub ATTINY2313 + Podstawka
1x AT24C256
1x BC547B
1x BC557B

Programowanie:


Mikrokontroler do sterownika został zaprogramowany w wersji demo programu BASCOM AVR firmy MCS Electronics (http://www.mcselec.com/). Program przedstawiony jest poniżej:

'************* Konfiguracja uC *****************
'***********************************************
$regfile = "Attiny2313.dat"
$crystal = 10000000
$baud = 19200
 
Config Portb = &B11111111 : Portb = &B11111111
Config Portd = &B11111111 : Portd = &B11111111
 
Config Scl = Portd.5
Config Sda = Portd.6
I2cinit
'********** Konfiguracja uC Koniec  ************
 
'******************  Zmienne *******************
'***********************************************
Dim Rw As Byte
Dim Adres As Word
Dim Dana As Byte
'pomocnicze
Dim Adr As Byte , Adr2 As Byte , Adr3 As Byte
'*************  Zmienne Koniec  ****************
 
'**************  Petla glowna ******************
'***********************************************
Do
 Portb.2 = 0
 Inputbin Rw
 Portb.2 = 1
 
 If Rw = 49 Then                                            'zapis
 '***********************
  'czerw
 Portb.0 = 1
 Portb.1 = 0
  Do
    Portb.2 = 0
    Inputbin Adr , Adr2 , Dana                              'czeka na 3 bajty
    Adres = Adr * 256
    Adres = Adres + Adr2
    Portb.2 = 1
    If Adres < 32768 Then
      Gosub Zapis_24c256
      Printbin Dana
    Else
      Portb.0 = 1
      Portb.1 = 1
      If Adres = 60000 Then Exit Do                         'taka liczba powoduje wyjscie z trybu zapisu
    End If
    Waitms 2
  Loop
 '***********************
 End If
 
 If Rw = 50 Then                                            'odczyt
 '***********************                                                         
  'ziel
 Portb.0 = 0
 Portb.1 = 1
  Do
    Portb.2 = 0
    Inputbin Adr , Adr2                                     'czeka na 2 bajty
    Adres = Adr * 256
    Adres = Adres + Adr2
    Portb.2 = 1
    If Adres < 32768 Then
      Gosub Odczyt_24c256
      Printbin Dana
    Else
      Portb.0 = 1
      Portb.1 = 1                                                    '234, 96
      If Adres = 60000 Then Exit Do                         'taka liczba powoduje wyjscie z trybu czytania
    End If
    Waitms 2
  Loop
 '***********************
 End If
 
Loop
End
'************ Petla glowna Koniec **************
'************************************************
'zapisuje dana 0-255 do jednej z 32768 8-bitowych
'w pamieci 24c256
'uzywanie:
    'adres = cos
    'dana = cos
    'gosub ZAPIS_24C256
'************************************************
'************************************************
Zapis_24c256:
'obliczanie msb i lsb adresu
Adr2 = Adres / 256
Adr3 = Adres Mod 256
 
I2cstart                                                 
I2cwbyte 160                                               
I2cwbyte Adr2                                             
I2cwbyte Adr3                                              
I2cwbyte Dana                                    
I2cstop
 
Return
'************************************************
'************************************************
Odczyt_24c256:
'obliczanie msb i lsb adresu
Adr2 = Adres / 256
Adr3 = Adres Mod 256
 
I2cstart                                                    
I2cwbyte 160                                               
I2cwbyte Adr2                                             
I2cwbyte Adr3                                             
I2cstart
 
I2cwbyte 161                                            
I2crbyte Dana , Nack                                        
 
I2cstop
Return
'************************************************
'************************************************

Obsługa i Komunikacja:


Płytka komunikuje się z komputerem PC za pomocą interfejsu RS-232 z wykorzystaniem dowolnego programu mogącego wysyłać i odbierać liczby binarne przez port szeregowy. Aplikacja sterująca powinna mieć ustawione następujące parametry transmisji:

Bity na Sekundę = 19200
Bity Danych = 8
Parzystość = Brak
Bity Stopu = 1
Sterowanie Przepływem = Brak

Po włączeniu zasilania programator jest w stanie czuwania, co sygnalizowane jest świeceniem diody D3. Wysyłając na port RS-232 liczbę 49 wprowadzamy urządzenie w tryb zapisu, co sygnalizowane jest świecenie czerwonej struktury LED w diodzie D2. Wysłanie liczby 50 przełącza programator w tryb odczytu danych. Sygnalizowane jest to świeceniem zielonej struktury w diodzie D2.

W trybie zapisu układ czeka na aż w buforze mikrokontrolera pojawią się 3 bajty danych (Adr1, Adr2, Dana). Odebranie danych sygnalizowane jest przygaszeniem diody D3 na czas ok 2ms. Następnie dana jest zapisywana do pamięci EEPROM pod Adresem Adr1 * 256 + Adr2 oraz wysyłana do komputera w celu potwierdzenia poprawności transmisji przez port szeregowy. Wyjścia z trybu zapisu można dokonać wysyłając bajty Adr1 = 234, Adr2 = 96 (czyli adres 60000) oraz dowolną daną (zostanie ona zignorowana)

W trybie odczytu uklad czeka na dwa bajty adresu (Adr1, Adr2) a następnie wysyła na port RS-232 odczytaną z pamięci EEPROM daną posiadającą adres Adr1 * 256 + Adr2. Odebranie bajtów sygnalizowane jest przygaszeniem diody D3 na czas ok 2ms. Wyjścia z trybu odczytu można dokonać wysyłając bajty Adr1 = 234, Adr2 = 96 (czyli adres 60000)

Zdjęcia Projektu:

ZałącznikWielkość
Schemat102.24 KB
Płytka11.31 KB
Płytka (odbicie lustrzane)11.53 KB
Płytka (6 na stronie)64.04 KB
Montowanie15.58 KB
Kod źródłowy4.1 KB
Program po kompilacji (BIN)876 bajtów
Program po kompilacji (HEX)2.42 KB



Portret użytkownika McGiver1

Czy można zaprogramować tym

Czy można zaprogramować tym 24W04?

Portret użytkownika mirley

Re: EEprom

Może dało by radę ale trzeba zmienić oprogramowanie bo w pierwowzorze miało to programować AT24C256

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika McGiver1

A znasz się na tym i umiałbyś

A znasz się na tym i umiałbyś to zrobić? Ja to dopiero 1 technikum i nie zajmujemy się cyfrówką :p Zresztą nie wiem czy wyprowadzenia by się zgadzały. A to 24W04 różni się coś od 24C04? :p

Portret użytkownika mirley

Re: EEprom

Znam się bo to w końcu mój układ :) Wyprowadzenia możesz sobie porównać na podstawie kart katalogowych obu układów. Poza tym pamięć 24W04 to prawie to samo co 24C04, ta pierwsza ma sprzętową kontrolę zapisu ale nie powinno to stanowić problemu. Spróbuj zrozumieć procedurę zapisu i odczytu. Opisałem to dokładnie http://mirley.firlej.org/zapis_odczyt_pamieci_at24cxx Poprostu trzeba je zamienić i trochę zmienić kod. Wiele osób prosi mnie o ciągłe zmiany swoich projektów ale ze względu na ograniczony czas, nie zawsze mogę coś zrobić

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika McGiver1

Ale jeśli wyprowadzenia się

Ale jeśli wyprowadzenia się zgadzają ,to mogę wykonać ten programator od strony sprzętowej? A potem dopisać program czy muszę coś zmienić na płytce?

Portret użytkownika mirley

Re: Programator

Wyprowadzenia są ok wiec możesz składać układ.

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika Kamil

Witam Moje pytanie może się

Witam

Moje pytanie może się głupie trochę wydawać, ale mianowicie, to czy przez złącze Prog zachodzi programowanie pamięci eeprom, czy poprostu służy ono tylko do zaprogramowania ATtiny2313?

-

Są ludzie i parapety, ale żeby klamką się urodzić to jest sztuka.

Portret użytkownika mirley

Re: Programator EEPROM

Przez złącze prog programuje sie tylko tiny2313. Programowanie EEPROM następuje za pomocą mikrokontrolera. Odbiera on dane poprzez port RS232 (kolejne bajty) i zapisuje je do pamięci EEPROM. Podobnie z odczytem tylko w drugą stronę.

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika McGiver1

Czy musi być tutaj rezonator

Czy musi być tutaj rezonator 4Mhz? Nie może być innego?

Portret użytkownika mirley

Re: Programator EEPROM

Może być dowolny rezonator... szczególnie że tak twoim mikrokontrolerem będzie attiny23113 a nie stary 90s2313. W mojej wersji zastosowałem później 10MHz, ale raczej układ na dowolnym kwarcu pójdzie. Polecam dać kwarc 16MHz aby nie było problemu z szybkością zapisu i problemów przy prędkości RS232, bo nie wszystkie kwarce się nadają dla wszystkich prędkości

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika McGiver1

Jednak kupiłem ten 4MHZ

Jednak kupiłem ten 4MHZ ,tylko nie mam złącza Dsub9 ,ale to nie twój problem jakoś się zrobi :P

PS: Mam pytanie takie z jednej strony do tego projektu ,ale pasuje do wszystkich, bowiem jeszcze się nie zbyt wtajemniczyłem w programowanie i mianowicie chodzi o to jak wgrać plik hex przez Burn-o-mat?
Skopiować te "cyferki" czy jak? Poprostu myślałem ,że to będzie plik o roszerzeniu hex. Nie wiem rozjaśnisz mi o co chodzi?
Przepraszam dopiero zaczynam przygodę z mikrokontorlerami itp.

Portret użytkownika mirley

Re: Programator EEPROM

Czytałeś artykuł u mnie na stronie "Jak zaprogramować pierwszy AVR", jeśli nie to poszukaj w "Artykuły różne", tam znajdziesz jak wgrać program w bascomie.

Plik hex który masz wgrać do mikrokontrolera to poprostu plik.hex (zapomnij o kopiowaniu cyferek) z rozszerzeniem hex. W burn-o-macie wgrywasz go po prostu poprzez wybranie w okienku i kliknięcie write, ale ja bym na twoim miejscu ograniczył się do bascoma. Bascom otwiera jeszcze pliki bas z kodem źródłowym, który po kompilacji robi plik hex i bin, oba te pliki zawierają program wynikowy strawny dla procesora.

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika connan12345

Jeśli 4 MHz to czemu nie na wewnętrznym RC ?

Owszem , powyżej 8MHz to trzeba na zewnętrznym kwarcu. Czyżby wewnętrzny rezonator RC na 4 MHz był mało stabilny? Trzeba korzystać z zewnętrznego kwarca 4MHz ?
Drugie pytanie : Jeśli mamy kabel USB - COM to ten programator będzie działał? Jakim programem pod Windowsa XP należy się posłużyć ? Istnieje takowy czy jedynie Linux ?? Dzięki za odpowiedź

Portret użytkownika mirley

Re: Programator

4Mhz musi być bo bez kwarca procesor nie będzie działał (ten który niegdyś zastosowałem). Potem dopiero zmieniłem na attiny i teraz polecał bym włączyć 8MHz wewnętrzny kwarc. Co do obsługi to dowolny program co jest wstanie bezpośrednie bajty na port wysyłać. Może być Rs232Tester z mojej strony, dorobiłem ostatnio blokowe wpisywanie danych zamiast po bajcie. Zasady komunikacji opisałem wyżej. Może być też skrypt w języku Python, ostatnio coraz częściej do czegoś używam tego języka i polecam (ActivePython +PySerial). Python działa oczywiście pod Windowsem też

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika Miki

Czy mógłbyś...

Witaj!

Mam do Ciebie małą prośbę. Mógłbyś w tym PDF gdzie jest 6 płytek do termotransferu dodać skalę wielkości? No wiesz, te dwie proste 3cm krechy ;)? Bo ja niestety niemam drukarki i wszystko muszę drukować w bibliotece, gdzie wszystko się pomniejsza do 96%, potem idę do punktu ksero, gdzie mi to powiększą do dobrego rozmiaru właśnie dzięki tej skali :)

Więc jakbyś znalał chwilę wolnego, to będę Ci bardzo wdzięczny.

Portret użytkownika mirley

Re: Programator

Skala została dodana jednak za bardzo z tym kombinujesz.... dodatkowe ksero pogarsza jakość wydruku. Jeśli masz dostęp do drukarki laserowej to wyłącz skalowanie wydruku w adobe reader, bo prawdopodobnie wybrana jest opcja "dopasuj do obszaru zadruku"

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika marekmm

programowanie po linii SDL SCL

Czy jest możliwość takim programatorem odczyt i zapis pamięci wlutowanej w układzie wykorzystując tylko linie SDL SCL i GND

Portret użytkownika mirley

Re; Programator EEPROM

Tak jest to możliwe.... podstawka jest tutaj jako dodatek i można ją pominąć

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika papi

Witam i chylę czoła pięknej

Witam i chylę czoła pięknej pracy
Widzę że możliwy jest zapis/odczyt pamięci o adresie A1-0 i A2-0 - czy byłby duży problem aby obsługiwać pamięci o innych adresach (np przy starcie program sprawdzałby pod jakim adresem jest pamięć) ? Ważne to jest przy wlutowanej pamięci i na stałe przypisanym adresie np. w tonerach drukarki f-my Samsung (każdy kolor ma inny adres). Kiedyś szukałem programator o takich właściwościach i się poddałem - skończyło się na lutowaniu tak aby każda pamięć miała adres 00

Portret użytkownika mirley

Re: Programator

Tak żeby sam odczytywał adres to chyba się nie da.... musisz znać adresy układów które podpinasz. Można by było zrobić tak że na starcie wysyłasz adres pamięci razem z informacją czy chcesz czytać czy pisać i wtedy wszystkie pamięci mogły by być na jednej magistrali. Zakładam że skoro ma to być w drukarce to każda będzie miała tak samo

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika marekmm

Programator EEPROM

Czy możesz podać kod dla pamięci 24C32 właśnie złożyłem twój programator i chciałbym wpisać kod do attiny 2313 też fajnie by było jak pisałeś ostatnio "że na starcie wysyła adres pamięci z informacją czy odczytać czy zapisać"

Portret użytkownika mirley

Re: EEPROM

Procedura zapisu 32 jest taka sam jak dla 256, na początku dodał bym jeszcze zmienna A typu byte i dopisał:

....
Inputbin Rw
Inputbin A
...

bezpośrednio po odczycie czy ma być zapis czy odczyt. Potem w linijkach

I2cwbyte 160  

zamianił bym 160 na A i tam gdzie jest 161 wpisał bym do zmiennej jakiejś pomocniczej A+1 i to wysłał zamiast 160.

Teraz na starcie będzie trzeba wysłać 49 lub 50 w zależności czy się czyta czy zapisuje do eeprom i zaraz po tym trzeba będzie wysłać adres bazowy kostki czyli w najprostszym przypadku 160

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika marekmm

Programator EEPROM

Możesz to sprawdzić i poprawić bo nie wszystko dobrze zrozumiałe :(

'************* Konfiguracja uC *****************
'***********************************************
$regfile = "Attiny2313.dat"
$crystal = 6000000
$baud = 19200
 
Config Portb = &B11111111 : Portb = &B11111111
Config Portd = &B11111111 : Portd = &B11111111
 
Config Scl = Portd.5
Config Sda = Portd.6
I2cinit
 
'********** Konfiguracja uC Koniec  ************
 
'******************  Zmienne *******************
'***********************************************
Dim Rw As Byte
 
Dim Adres As Word
Dim Dana As Byte
Dim A As Byte
'pomocnicze
Dim Adr1 As Byte , Adr3 As Byte , Adr4 As Byte
'*************  Zmienne Koniec  ****************
 
'**************  Petla glowna ******************
'***********************************************
Do
 Portb.2 = 0
 Inputbin Rw
 Inputbin A
 Portb.2 = 1
 
 If Rw = 49 Then                                            'zapis
 '***********************
  'czerw
 Portb.0 = 1
 Portb.1 = 0
  Do
    Portb.2 = 0
    Inputbin Adr1 , Adr3 , Dana                             'czeka na 3 bajty
    Adres = Adr1 * 256
    Adres = Adres + Adr3
    Portb.2 = 1
    If Adres < 4095 Then
      Gosub Zapis_24c32
      Printbin Dana
    Else
      Portb.0 = 1
      Portb.1 = 1
      If Adres = 60000 Then Exit Do                         'taka liczba powoduje wyjście z trybu zapisu
    End If
    Waitms 2
  Loop
 '***********************
 End If
 
 If Rw = 50 Then                                            'odczyt
 '***********************                                                              1
  'ziel
 Portb.0 = 0
 Portb.1 = 1
  Do
    Portb.2 = 0
    Inputbin Adr1 , Adr3                                    'czeka na 2 bajty
    Adres = Adr1 * 256
    Adres = Adres + Adr3
    Portb.2 = 1
    If Adres < 4095 Then
      Gosub Odczyt_24c32
      Printbin Dana
    Else
      Portb.0 = 1
      Portb.1 = 1
      If Adres = 60000 Then Exit Do                         'taka liczba powoduje wyjście z trybu czytania
    End If
    Waitms 2
  Loop
 '***********************
 End If
 
Loop
End
'************ Petla glowna Koniec **************
 
 
'************************************************
'************************************************
 
'************************************************
'zapisuje dana 0-255 do jednej z 4095 8-bitowych
'komorek o specjalnie zdefiniowanej
'w pamieci 24c32
'uzywanie:
    'adres = cos
    'dana = cos
    'gosub ZAPIS_24C32
'************************************************
'************************************************
Zapis_24c32:
'obliczanie msb i lsb adresu
Adr3 = Adres / 256
Adr4 = Adres Mod 256
 
I2cstart                                                    'warunek startu
I2cwbyte A                                                  'wyślij adres układu
I2cwbyte Adr3                                               'wyślij adres w pamięci EEPROM
I2cwbyte Adr4                                               'wyślij adres w pamięci EEPROM
I2cwbyte Dana                                               'wyślij daną
I2cstop
 
Return
'************************************************
'************************************************
'************************************************
'************************************************
Odczyt_24c32:
'obliczanie msb i lsb adresu
Adr3 = Adres / 256
Adr4 = Adres Mod 256
 
I2cstart                                                    'warunek startu
I2cwbyte A                                                  'zaadresujemy urządzenie
I2cwbyte Adr3                                               'wyślij adres komórki EEPROM
I2cwbyte Adr4                                               'wyślij adres komórki EEPROM
I2cstart
                                                     'znów generujemy warunek startu
                                                      'zmiana adresu na odczy
I2cwbyte A + 1                                              'adresujemy układ EEPROM do odczytu
I2crbyte Dana , Nack                                        'odczytujemy komórkę pamięci.
 
I2cstop
Return
'************************************************
'************************************************

Portret użytkownika mirley

Re: EEPROM

Jeszcze tutaj

I2cwbyte A + 1 

dał bym najpierw:

B = A+1
I2cwbyte B

Gdzie B jest pomocniczą zmienna typu byte

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika marekmm

Coś nie tak po kompilacji

Coś nie tak po kompilacji wyskakuje Error w linii 129 i 130 Bascom AVR ver. 2.0.5.0

'************* Konfiguracja uC *****************
'***********************************************
$regfile = "Attiny2313.dat"
$crystal = 6000000
$baud = 19200
 
Config Portb = &B11111111 : Portb = &B11111111
Config Portd = &B11111111 : Portd = &B11111111
 
Config Scl = Portd.5
Config Sda = Portd.6
I2cinit
 
'********** Konfiguracja uC Koniec  ************
 
'******************  Zmienne *******************
'***********************************************
Dim Rw As Byte
 
Dim Adres As Word
Dim Dana As Byte
Dim A As Byte
'pomocnicze
Dim Adr1 As Byte , Adr3 As Byte , Adr4 As Byte
'*************  Zmienne Koniec  ****************
 
'**************  Petla glowna ******************
'***********************************************
Do
 Portb.2 = 0
 Inputbin Rw
 Inputbin A
 Portb.2 = 1
 
 If Rw = 49 Then                                            'zapis
 '***********************
  'czerw
 Portb.0 = 1
 Portb.1 = 0
  Do
    Portb.2 = 0
    Inputbin Adr1 , Adr3 , Dana                             'czeka na 3 bajty
    Adres = Adr1 * 256
    Adres = Adres + Adr3
    Portb.2 = 1
    If Adres < 4095 Then
      Gosub Zapis_24c32
      Printbin Dana
    Else
      Portb.0 = 1
      Portb.1 = 1
      If Adres = 60000 Then Exit Do                         'taka liczba powoduje wyjście z trybu zapisu
    End If
    Waitms 2
  Loop
 '***********************
 End If
 
 If Rw = 50 Then                                            'odczyt
 '***********************                                                              1
  'ziel
 Portb.0 = 0
 Portb.1 = 1
  Do
    Portb.2 = 0
    Inputbin Adr1 , Adr3                                    'czeka na 2 bajty
    Adres = Adr1 * 256
    Adres = Adres + Adr3
    Portb.2 = 1
    If Adres < 4095 Then
      Gosub Odczyt_24c32
      Printbin Dana
    Else
      Portb.0 = 1
      Portb.1 = 1
      If Adres = 60000 Then Exit Do                         'taka liczba powoduje wyjście z trybu czytania
    End If
    Waitms 2
  Loop
 '***********************
 End If
 
Loop
End
'************ Petla glowna Koniec **************
 
 
'************************************************
'************************************************
 
'************************************************
'zapisuje dana 0-255 do jednej z 4095 8-bitowych
'komorek o specjalnie zdefiniowanej
'w pamieci 24c32
'uzywanie:
    'adres = cos
    'dana = cos
    'gosub ZAPIS_24C32
'************************************************
'************************************************
Zapis_24c32:
'obliczanie msb i lsb adresu
Adr3 = Adres / 256
Adr4 = Adres Mod 256
 
I2cstart                                                    'warunek startu
I2cwbyte A                                                  'wyślij adres układu
I2cwbyte Adr3                                               'wyślij adres w pamięci EEPROM
I2cwbyte Adr4                                               'wyślij adres w pamięci EEPROM
I2cwbyte Dana                                               'wyślij daną
I2cstop
 
Return
'************************************************
'************************************************
'************************************************
'************************************************
Odczyt_24c32:
'obliczanie msb i lsb adresu
Adr3 = Adres / 256
Adr4 = Adres Mod 256
 
I2cstart                                                    'warunek startu
I2cwbyte A                                                  'zaadresujemy urządzenie
I2cwbyte Adr3                                               'wyślij adres komórki EEPROM
I2cwbyte Adr4                                               'wyślij adres komórki EEPROM
I2cstart
 
B = A + 1                                                   'znów generujemy warunek startu
I2cwbyte B                                                  'zmiana adresu na odczy
I2cwbyte A + 1                                              'adresujemy układ EEPROM do odczytu
I2crbyte Dana , Nack                                        'odczytujemy komórkę pamięci.
 
I2cstop
Return
'************************************************
'************************************************

Portret użytkownika mirley

Re: Programator

ostatnia procedura ma wyglądać tak:

Odczyt_24c32:
'obliczanie msb i lsb adresu
Adr3 = Adres / 256
Adr4 = Adres Mod 256
 
I2cstart                                                    'warunek startu
I2cwbyte A                                                  'zaadresujemy urządzenie
I2cwbyte Adr3                                               'wyślij adres komórki EEPROM
I2cwbyte Adr4                                               'wyślij adres komórki EEPROM
I2cstart
 
B = A + 1                                                   'znów generujemy warunek startu
I2cwbyte B                                                  'zmiana adresu na odczy
I2crbyte Dana , Nack                                        'odczytujemy komórkę pamięci.
 
I2cstop
Return

to chyba logiczne że jak dodajesz dwie linijki

B = A + 1                                                   
I2cwbyte B 

to trzeba skasować:

 
I2cwbyte A + 1  

a poza ty nie zadeklarowałeś zmiennej na początku. Potrzebne jest jeszcze

Dim B as byte

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika _ktoś_

Witam. Wszędzie szukam choćby

Witam. Wszędzie szukam choćby jakiejś szczątkowej informacji na temat obsługi pamięci NAND. Chodzi mi tylko o przykład zapisu jednej komórki adresu i podobny przykład odczytu. W tych pamięciach wszelkie dane latają po 8bitowej szynie danych a do kontroli używa się /CE /WE /RE CLE ALE /WP RY/`BY. Zagłębiałem się w datasheet pamięci TC58DVG02A1FT00 ale oprócz opisu wyprowadzeń nie znalazłem nic co by mi jasno wyjasniło jak się zapisuje i odczytuje. Może coś źle patrzę ? Proszę o pomoc. Moim celem jest finalnie zrobienie programatora bit-po-bicie na Atmega + wyświetlacz 16x2 + klawisze 4x4.Klawisze i wyświetlacz , to akurat prosto w Bascomie opisane. Także proszę o pomoc w naświetleniu mi nieco o NAND. Dziękuję.

Portret użytkownika mirley

RE: Pamięc

Niestety w tej kwestii nie pomogę..... nigdy się tym nie zajmowałem i sam by musiał się nauczyć.

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika _ktoś_

No a choćby nakierować czy

No a choćby nakierować czy dobrze odczytuję diagram odczytu i zapisu/programowania ? Temat zawarty na elektrodzie http://www.elektroda.pl/rtvforum/viewtopic.php?t=2052415&highlight= . Jak widać sporo tam opisałem, ale wolałbym zasięgnąc opini kogoś kto różne układy składa , programuje i co ważne :) działa mu to. :) pozdrawiam.

Portret użytkownika mirley

Re: pamięci

jak już mówiłem dokładnie budowy pamięci nie znam ale po diagramie przebiegów widać chyba wszystko. Na starcie opuszczasz CE na masę i chwile po tym sygnał CLE podnosi się. na magistrali powinien znajdowac się rozkaz CMD. Zbocze na WE wpisuje CMD (trzeba sprawdzić czy narastające czy opadające) do odpowiedniego rejestru. Sygnał CLE opada i ustawiany jest ALE bo następny bedzie wpisywany adres. Na magistrali wejściowej pojawiają się kolejne bajty adresu i zbocza na WE wpisują je do odpowiedniego rejestru. Wtedy WR zostaje na VDD a na magistrali mamy kolejne bajty, które odczytujemy zboczem RE. Przy odczycie jak widzę nie ma na końcu rozkazu potwierdzenia natomiast przy zapisie powinieneś na końcu znowu ustawić CLE i wpisac rozkaz który powinien znaleźć się wcześniej na magistrali wejściowej

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika _ktoś_

Dopisałem wedle info. Dzięki!

Dzięki ! Dopisałem :) Faktycznie , w diagramie jest to H10 . SupeR ! Rewelacja.

Portret użytkownika Mti3107

Pytanie

czy ten układ można przerobić na USB? Nie posiadam starego komputera, wydaje mi sie że USB jest częściej stosowane ;)
Przekopałem sporo stron aż natrafiłem tutaj, wszędzie indziej są oferty kupna całego modułu, ja jednak wolałbym zrobić go sam :)
Jeżeli znajdzie Pan chwilkę, bardzo bym prosił o rozpatrzenie tej proźby.
Z góry dziękuje :)
Pozdrawiam. Mateusz

Portret użytkownika mirley

Re: USB

Zrobienie tego na usb wcale nie jest takie proste, w bascomie nie da się tego raczej sensownie napisać więc trzeba to zrobić w C. Pomyśl raczej o przejściówce USB-RS232, która tworzy w systemie wirtulany port com.

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika Mti3107

USB

To ma być konwerter USB czy zwykła przejściówka ?

Portret użytkownika mirley

Re: Konwerter

Konwerter, układ aktywny. Nie istnieje coś takiego jak zwykła przejściówka. Najlepiej poszukaj coś na układzie FTDI FT232. Wtedy napewno będzie działać

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika mozart

równoległe połączenie 2-ch pamięci(zapis i odczyt)

Najmocniej przepraszam za moje pytanie!
Mój problem to - odczyt programu z kasety magnetofonowej przez interfejs, a następnie zapis w pamięciach 24C256 i 24C512 z uwagi na wielkość(ok.715K) W opisanych sposobach odczytu przez RS232 pokazał Pan zawsze jedną pamięć - natomiast ,jak to się ma w przypadku użycia dwóch i więcej połączonych równolegle pamięciach. Czy pokazany przez Pana program do zapisu i odczytu pamięci jest taki sam, zarówno dla jednej ,jak i więcej pamięci .Jeżeli jest iaczej to prosiłbym o sprostowanie.Przedstawiony przez Pana programator do zapisu i odczytu pamięci , mogę wykorzystać w swoim przypadku do zapisu i odczytu wielu pamięci(wbudowanie do przedstawionego programatora dodatkowych podstawek pod pamięć).Proszę o wyrozumiałość -przekopałem trochę internetu i nie doszukałem się informacji na nurtujący mnie temat.
Pozdrawiam mozart!

Portret użytkownika mirley

Re: EEPROM

Da się podłączyć więcej pamięci, z tym że trzeba zadbać o inny adres kaźej z pamięci. W karcie katalogowej opisane są piny zewnętrzne zmieniające adres pamięci. Ja zwarłem piny A0 i A1 do masy co zaowocowało adresem do zapisu = 160 i do odczytu 161.

I2cstart                                                 
I2cwbyte 160     '< tu jest podawany adres do zapisu, wartość z karty katalogowej pamięci                                            
.... 

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika gh-mozart

eeprom

W przypadku połączenia więcej układów pamięci, to - w/g odpowiedzi rozumiem , że należy dokonać zwarcia A0 i A1 w obu pamięciach , (t.j w pamięci .256 i .512 piny A0iA1 należy zewrzeć do masy)-czy tak?.

Portret użytkownika mirley

Re: Adresy

Otwórz karty katalogowe obu pamięci i zobacz jakie ma adresy w zależności od ustawień linii adresowych. Adresy muszą być różne aby dało się odczytać obie pamięci podłączone na jednej magistrali

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika connan12345

Różnice w 24Cxx a 93Cxx....

Witam!
Mam pytanie co do odczytu i zapisu pamięci szeregowych 93Cxx.
Wiem że trzeba je podłączyć nieco inaczej niż 24Cxx gdyż DI i DO są oddzielnie więc najlepiej użyć sprzętowego SPI podłączając tak :(SCK)-CLK ,(/SS)-CS ,(MISO)-DO , (MOSI)-DI a ORG układu najlepiej podłączyć do GND by wymusić 8bitową charakterystykę pamięci. I teraz takie moje pytanie : jak się obsługuje taką pamięć po SPI ? Nieco o tym jest w Elektronice Praktycznej 11/2005 (artykuł p.Marcina Wiązania) dostępnej online w PDF.
Tam jest tak jakby kto chciał softwareowo zrobić (w krokach , rysunek 13 i rysunek 14):
dla odczytu : DI = 1 , CS = 1 , SK=1 , SK=0 , SK=1, SK=0 ,DI=0 , SK=1, i teraz DI=0 trzymamy (jednocześnie zmieniając SK=0 SK=1 tyle razy ile jest adresów w pamięci) , po czym na DO pojawia się 0 (wcześniej była wysoka impedanacja) i od tego momentu odczytujemy kolejne dane (po sekwencjach SK=0,SK=1) aż do D0 czyli ostatniej komóreczki pamięci. Wygląda na to że te pamięci 93Cxx to się odczytuje całą zawartością na raz? To nie można tak jak w 24Cxx pojedynczy adres ? Dziwne. Jak to odczytać nie wszystko_na_raz ?
Dobrze rozumuję ?

No , ok. Załóżmy że tak to się dzieje. To jak teraz taki łańcuch zapisać bezpośrednio do 24Cxx ?

Portret użytkownika mirley

Re: EEPROM

Przeczytaj najpier pdf od tej pamięci. Normalnie przeciez można przeczytać dowolną komórkę pamięci. organizacja jest trochę inna bo zapisuje się 16 bitowe dane. Wysyłasz adres po SPI i po wysłaniu adresu na wyjściu pojawiają się bity D15.....D0 wartości pod tym adresem. Zapis podobnie. Wszystko jest narysowane w karcie katalogowej

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika connan12345

Spojrzałem jeszcze raz i widzę :)

Odczyt 93lc46 może wyglądać tak : CS=1 , SK zmienia się z 0 na 1 przy każdym bicie ,więc na DO 110 (binarnie 3cykle SK) teraz binarnie adres jaki chcemy odczytać w wersji 8/16 bitowej zależnej od ORG , po czym następuje "zero" na DO i wraz z taktami zegara "wyłazi" nam dana spod tego adresu?
Oczywiście na koniec CS=0
To tak jakbym chciał softwareowo to napisać. Ale jak będzie wyglądał kod w BASCOM dla SPI ?
Według tego : http://avrhelp.mcselec.com/index.html?config_spi.htm
Config Spi = Hard , Interrupt = Off , Data Order = Msb , Master = Yes , Polarity = High , Phase = 1 , Clockrate = 128 , Noss = 1
Spiinit ?
Jak ustawić i co by zapisywać z prędkością adekwatną do możliwości układu ?

Portret użytkownika mirley

Re; SPi

Mało używałem SPI i a jak już coś to sobie sam napisałem prostą procedurkę. niemniej jednak w konfiguracji musisz przede wszystkim ustawić Clockrate czyli podzielnik. Przez ile zegar spi będzie podzielony w stosunku do zegara systemowego, Polarity ustala czy linia zegara w stanie spoczynku jest 0 czy 1. Wszystko dokładnie opisane jest w helpie do bascoma

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.