HomeMade

Pełna wersja: Proszę o pomoc przy ATMEGA32
Aktualnie przeglądasz uproszczoną wersję forum. Kliknij tutaj, by zobaczyć wersję z pełnym formatowaniem.
Stron: 1 2 3 4
Kupiłem sobie płytkę z różnymi gotowymi peryferiami i programatorem po USB do nauki programowania AVRów. Chciałbym kiedyś napisac np. obsługę jakiejś syntezy DDS a bez tego nie mam co zaczynać.
Wszystkie proste rzeczy jak obsługa przycisków i wyświetlaczóe LEDowych przerobiłem i działało.
Teraz juz drugi dzień próbuję uruchomić wyświetlacz 16*2 (hd44780) i wyświetlić choć jeden znaczek ... niestety korzystając z wielu przykładów z netu nie udało mi sie zainicjować wyświetlacza. Wyświetlacz sprawdzony w innej konstrukcji - działa. Może ktoś z kolegów przerabiał to niedawno i ma schemat połączeń wraz z programem w C. Byłbym wdzięczny za pomoc.
Chodzi mi chociaż o taki programik którego edytując będę mógł zmienić napis na wyświetlaczu. Nie istotne czy 4 czy 8 bitowa szyna danych z RW czy bez - dostosuję się.
Niestety nie wiem jak w C może ktoś kto używa C się wypowie. Natomiast w bascomie definiuje się to w środowisku, można też zapisać to bezpośrednio w kodzie.
Opisywaliśmy to w innym wątku rzuć okiem tutaj.
Daj znać jak zwalczysz temat innym się przyda ta wiedza.
Marcin,
jeśli zaczynasz zabawę w programowanie w języku C to warto kupić sobie dobry podręcznik z którego nauczysz się obsługiwać podstawowe peryferia.

Polecam pozycję: Mirosław Kardaś "Mikrokontrolery AVR Jezyk C podstawy programowania". Na stronie 202 masz opis sterownika i krok po kroku podstawowe funkcje do obsługi LCD 2*16 na HD44780.

Był kiedyś taki pomysł aby zrobić na forum prosty projekt otwarty w języku C jako formę nauki tego języka. Niestety nie było chętnych aby go realizować chociaż chętni do nauki zapewne by się znaleźli. Jest trochę różnych kursów w necie ale to tylko podstawy.
Dobrze powiedziane. ... ale .... Mam książkę "Mikrokontrolery AVR" i jest tu opisana zasada działania tych wyświetlaczy i obsługa. Korzystałem również z opracowań ludzi któzy swoją wiedzę umieścili na stronach www - wszystko niby krok po kroku opisane. Staram sie robić dokładnie i starannie jednak albo kody skopiowane się nie chcą skompilować albo poprostu program nie rusza. Problem w tym że nie wiem gdzie robię błędy - bo napewno robię skoro nie działa. Oczywiście wszystkie kursy które mogłem znaleźć w sieci przerobiłem. przez pół piątku i prawie całą sobote (dzisiaj). i nic ... nie wiem o czymś drobnym i pewnie łatwo to poprawić tyle że nie wiem co Smile

A co do BASCOMA to nie chcę go się uczyć bo podobno tak jest , że jak się człowiek wciągnie w mikroprocesory (a sądzę że jest to nieuniknione w moim przypadku Smile ) to bascom okaże się tylko "przelotną miłością"
Może pokaż fragment kodu tutaj na forum, będzie łatwiej dojść co jest nie tak...

Co do bascoma... jeszcze nie wiem czy to przelotna miłość.
Ale pozwala mi osiągnąć cel w miarę szybko... btw. Analizator NA1 kolega pisze w bascomie i okazuje się że można nawet takie skomplikowane rzeczy.
Oczywiście nie namawiam bo każdy wybiera swoją drogę. Ale gdybyś robił coś w bascomie łatwiej było by mi Ci pomóc.
Powodzenia Smile
Co do języka to wszystko zależy z jakiego poziomu startujesz i co chcesz docelowo robić. Nie sugeruj się tymi bzdurami wypisywanymi na elektrodzie.
Jeśli nie znasz procesorów i żadnego języka programowania spokojnie zacznij od Bascoma. Bez większego problemu na bazie dostepnych przykładów poradzisz sobie z prostymi aplikacjami i na pewno będą działały. To czego się nauczysz tylko ci pomoże w dalszej edukacji. Na tym forum jest kilku Kolegów którzy w Bascomie zrobili bardzo fajne projekty. Do celów hobbystycznych zupełnie wystarczy (ograniczenie do 8051, avr).

Jeśli planujesz robić duże, rozbudowane projekty, zmieniać procesory (ARM, DSP) lub robić projekty zespołowe to jak najbardziej odpowiedni jest C. Niestety składnia tego języka jest dość trudna i trzeba znacznie więcej czasu na jej opanowanie. Potem jest już z górki a w nagrodę techniki nie dostępne w Bascomie.

Assembler, tak naprawdę sam język jest bardzo prosty, problem w tym, że prawie wszystko musimy sobie zrobić sami (funkcje, procedury, drivery) ale za to jest najszybszy, pochłania najmniej kodu procesora i daje całkowita swobodę programiście.


Sterowanie tym wyświetlaczem jest dość proste, mam oczywiście działające gotowce ale w ASM (konsola ATU, minCOMP i wiele innych projektów).

1/ pod czym to kompilujesz WinAVR ?
2/ pytanie czy masz prawidłowo ustawiony zegar, jak dasz w pętli delay_ms(1000) to jest rzeczywiście 1 sekunda. Może procek pracuje ciągle na wewnętrznym generatorze RC i opóźnienia dla LCD są inne (problem bitów cfg a nie programu).
3/ często źle ustawiamy kierunek portu i dlatego nie chodzi poprawnie sterowanie.
4/jeśli mamy jakoś pomóc musisz wrzucić kod programu, nie jest to mój ulubiony język ale może coś pomożemy.
Jestem mile zaskoczony tak szybką chęcią pomocy !
Mam pewną myśl. Może gdy wyskakuja błędy kompilacji to wina tego że mam poprostu "zanowy" kompilator ...
Ściągnę starszą wersję i zrobię przykład z tego linku:
http://radzio.dxp.pl/hd44780/hd44780_avr_8-bit_rw_c.htm

W WinAVR wyskakuja błędy:

> "make.exe" all

-------- begin --------
avr-gcc (WinAVR 20100110) 4.3.3
Copyright © 2008 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

make.exe: *** No rule to make target `main.elf', needed by `elf'. Stop.

> Process Exit Code: 2
> Time Taken: 00:01

EDIT:
Chyba kody "radzia" są do ... niedziałające Smile bo starsza wersja pokazuje mi to samo:

> "make.exe" all

-------- begin --------
avr-gcc (GCC) 3.4.6
Copyright © 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

make.exe: *** No rule to make target `obj/main.o', needed by `main.elf'. Stop.

> Process Exit Code: 2
> Time Taken: 00:00

Może ktoś z Was spróbuje to skompilować dwa pliki .c i .h są do ściągnięcia na dole strony do której podałem link
A ja zabieram sie za inny przykład ...

EDIT_2: Znalazłem symulator - jeśli działa tak jak prawdziwy układ to sam sobie program napiszę i nie będzie problemu z kompilacjami, ale już ide spać bo ... późno (2:11)
link dla chętnych : http://www.dinceraydin.com/djlcdsim/djlcdsim.html
krok 1 - zaprezentuj hardware... podaj schemat , pokaż zdjęcie itp.. zdradź co to jest
Kod:
Kupiłem sobie płytkę z różnymi gotowymi peryferiami i programatorem po USB do nauki programowania AVRów
i czy masz w komplecie do PCB gotowe programy przykładowe. Może to jest płytka AND-TECH.


krok2 - wgrasz program np napisany w bascom i jak LCD ruszy - dopiero zacznij dalszą zabawę.

krok3 - na sprawdzonej PCB ożywiasz program w C...

Darmowy kompilator BASCOm i przykłady jakie tam są dobrze okomentowane pozwola ci napisac pierwszy program na LCD w 30 sekund.
a napewno już byś pisał piaty program. Na forum podsyłałem komus na PW kod ( sprawdzony) do obsługi impulsatora w przerwaniu, ale na BASCOM, Jak przełamiesz swoje opory natury moralnej - zacznij od BASCOMA a wrzucę tu kody do impulsatora.

albo pobierz demo tego środowiska C http://www.hpinfotech.ro/html/download.htm

tu znajdziesz przykłady które na 100% sie skompilują - tylko zmienić konfigurację LCD w MENU programu - sprawdziłem obydwa DEMA dlla LCD się kompilują...

[attachment=3582]

:-)
BASCOM Demo ze strony producenta - http://www.mcselec.com/index.php?option=...&Itemid=54
Witam. Jeżeli chodzi o wyświetlacz HD44780 tutaj jest dość przyjemny kursik: http://hobby.abxyz.bplaced.net/index.php?pid=4&aid=8
Na stronie jest podpunkt "Wyświetlacz alfanumeryczny LCD". Wydaje mi się że ten kurs jest w stanie Ci pomóc. Sam osobiście uczyłem się pisać w C właśnie z tego kursu, i nauczyłem się (tak mi się wydaje) bardzo dużo. Tak więc powodzenia! Pozdrawiam

@edit:
Wystarczy że znajdziesz w bibliotece plik "hd44780.c", wstawisz go na początku czyli #include "hd44780.h"
Jak zobaczysz co znajduje się w tym pliku to będzie tam na przykład taka funkcja jak:
Kod:
void lcd_init(void)
{
    _delay_ms(31);    
  
    SET_OUT_LCD_RS;
    SET_OUT_LCD_RW;
    SET_OUT_LCD_E;
    SET_OUT_LCD_D4;
    SET_OUT_LCD_D5;
    SET_OUT_LCD_D6;
    SET_OUT_LCD_D7;

    CLR_LCD_E;
    CLR_LCD_RS;
    CLR_LCD_RW;
    SET_LCD_D4;
    SET_LCD_D5;
    CLR_LCD_D6;
    CLR_LCD_D7;        
  
    LCD_NOP;
    SET_LCD_E;
    LCD_NOP;
    CLR_LCD_E;
    LCD_NOP;
    _delay_ms(10);

    LCD_NOP;
    SET_LCD_E;
    LCD_NOP;
    CLR_LCD_E;
    LCD_NOP;
    _delay_ms(2);

    LCD_NOP;
    SET_LCD_E;
    LCD_NOP;
    CLR_LCD_E;
    LCD_NOP;
    _delay_ms(2);

    CLR_LCD_D4;
    LCD_NOP;
    SET_LCD_E;
    LCD_NOP;
    CLR_LCD_E;
    LCD_NOP;
    _delay_us(80);

    WriteToLCD (0x28 , LCDCOMMAND) ;
    LCD_DISPLAY(0) ;
    LCD_CLEAR ;
    LCD_ENTRY_MODE(LCDINCREMENT) ;
}
Czyli dokładnie to czego trzeba Ci przy inicjacji wyświetlacza. Jeżeli nie znajdziesz w bibliotece pliku hd44780.c, jest on również na stronce którą wcześniej podałem.

@edit:
Właśnie patrze się na log "make.exe: *** No rule to make target `main.elf', needed by `elf'. Stop." i wychodzi na to że coś nie tak jest z makefile. Makefile musisz mieć w folderze w którym masz główny kod programu, i oczywiście musisz mieć w nim podaną poprawną nazwę głównego programu - bo wychodzi na to że make nie może znaleźć pliku z kodem.
Hmm, a to nie są kłopoty ze zła składnią pliku make?

Ja używam zawartego w WinAVR edytora Programmers Notepad i musiałem przerobić sobie make i wywoływanie kompilacji w tym edytorze.

Zamieść kody jako załącznik spróbujemy skompilować u siebie, poprawić.
Stron: 1 2 3 4
Przekierowanie