HomeMade

Pełna wersja: Programowanie w języku C w środowisku AVR Studio4
Aktualnie przeglądasz uproszczoną wersję forum. Kliknij tutaj, by zobaczyć wersję z pełnym formatowaniem.
Stron: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
Sorry - ale bez przeczytania dokumentacji do elementów elektronicznych sterowanych programem (uP i peryferia) - może być lipa.
Przepraszam - już się nie wtrącam.
[
Kliknijcie na "New Project"
2. Potem wybierzcie "AVR GCC" i resztę tak jak zaznaczyłem na rysunku. wybierzcie sobie katalog w którym macie wszystkie dotychczasowe lekcje, następnie klikacie "Next" i zaznaczacie to co na rysunku .......

Przy kompilowaniu moich wypocin(dołożyłem plik "makefile") a także lekcji 9 mam taki sam komunikat:

Build started 26.1.2012 at 22:44:51
make: *** Brak reguł do zrobienia obiektu `../NOWY.c', wymaganego przez `NOWY.o'. Stop.
Build failed with 1 errors and 0 warnings...
Przerabiałem kilka razy i zawsze mam taki wynik,jakieś sugestie?
(26-01-2012 21:04)SQ6ADE napisał(a): [ -> ]Nie tracić czasu proca i korzystać z informacji zgromadzonych w wyświetlaczu.
Lektura obsługi sterownika HD-LCD wskazana.

A jeszcze konkretniej. Jakieś praktycznie sprawdzone przykłady?


(26-01-2012 21:44)SP4EJT napisał(a): [ -> ]
(26-01-2012 20:57)SQ9RFC napisał(a): [ -> ]Nadal dręczy mnie pytanie: po co robisz zapis do portu który ustawiony jest do odczytu?
Mógłbyś rozwinąć to pytanie ? bo nie do końca wiem o co chodzi ...


Lekcja 5
( komentarze moje)
...
int main(void)
{
DDRA = 255;
DDRB = 0x00; // ustawiasz wszystkie piny portu B jako wejścia
PORTB= 0x01; // tu nie kapuje: wpisujesz do portu B wartość, po co ? skoro ten port wcześniej ustawiasz do odczytu.
PORTA= 0b01010101;
while(1)
...
(26-01-2012 23:16)SQ6ADE napisał(a): [ -> ]Sorry - ale bez przeczytania dokumentacji do elementów elektronicznych sterowanych programem (uP i peryferia) - może być lipa.
Przepraszam - już się nie wtrącam.
Ja o tym wiem, ale ludzie korzystający z tego kursu nie są najlepsi w tym temacie - podejrzewam że niektórzy na tyle słabo znają komputerowe sprawy, że nie znajdą właściwych pomocy w internecie ... nie wpominając już o czytaniu chociażby noty aplikacyjnej AD9951 w języku angielskim (ze zrozumieniem).
Mówisz o przypadku gdy wszyscy już umieją pewne rzeczy. Tutaj jest totalna "zerówka" jak pewnie sam zauważyłeś po pytaniach lursantów kierowanych do mnie. Nie chciałem Cię obrazić (jesli tak sie stało to przeprawszam), tylko wyjasnić, że ten sposób edukacji, tutaj nie zda egzaminu ( jak na tą chwilę ). Oczywiscie potem gdy załapią bakcyla sam ich pognam batem do tego aby sami szukali wiadomości i sami siebie rozwijali.
(26-01-2012 23:54)SP5IWI napisał(a): [ -> ]Przy kompilowaniu moich wypocin(dołożyłem plik "makefile") a także lekcji 9 mam taki sam komunikat:
Build started 26.1.2012 at 22:44:51
make: *** Brak reguł do zrobienia obiektu `../NOWY.c', wymaganego przez `NOWY.o'. Stop.
Build failed with 1 errors and 0 warnings...
Przerabiałem kilka razy i zawsze mam taki wynik,jakieś sugestie?
Janku, czy potrafisz skompresować katalog z zawartością tego niedziałającego projektu i przesłać tu, na forum jako załącznik ? Tak jak ja to robię z lekcjami, wtedy będę mógł sprawdzić to u siebie i być może znajdę błąd.
(26-01-2012 20:57)SQ9RFC napisał(a): [ -> ]...
int main(void)
{
DDRA = 255;
DDRB = 0x00; // ustawiasz wszystkie piny portu B jako wejścia
PORTB= 0x01; // tu nie kapuje: wpisujesz do portu B wartość, po co ? skoro ten port wcześniej ustawiasz do odczytu.
PORTA= 0b01010101;
while(1)
...
Lekcja3 się kłania, oto jej fragment :
...
DDRB = 0b00000000; // właczyłem do zabawy port B
PORTB= 0b00000111; // "1" oznacza podciągnięcie wejścia do napięcia zasilania Atmegi poprzez wewnętrzny rezystor
// możecie sprawdzić miernikiem że wyprowadzenia B0, B1 i B2 mają jakieś napięcie w przeciwieństwie do B3, B4 .... B7
...

Tłumaczę teraz przypadek z twojego pytania (czyli lekcji 5):
ten zabieg podciąga ( PB0 ) do napiecia zasilania - inaczej mówiąc do stanu wysokiego. Dzieje się to za sprawą dołączanego wewnątrz atmegi rezystora pomiędzy zasilaniem a tym wyprowadzeniem.
Tam jest podpięty przycisk ( a drugim biegunem do masy). Żeby Atmega wiedziała o tym że przyciskasz, stosuje się zabieg polegający na "podciągnięciu" tego wyprowadzenia ( czyli PB0 ) do stanu wysokiego. Naciskając przycisk robimy zwarcie pomiędzy masą a wyprowadzeiniem PB0 uzyskując w ten sposób zmianę stanu wysokiego na stan niski na tym wyprowadzeniu ( czyli zmianę z 1 na 0 ) Przy puszczeniu przycisku stan logiczny tego wyprowadzenia z powrotem wraca do "jedynki logicznej" za sprawą rezystora podciągającego.
Ok znów nie doczytałem.
Pytanko 1 dla speców od PICa - czy tak samo (programowo) można podciągać do stanu wysokiego wejścia? czy trzeba to robić zewnętrznym opornikiem - przeglądając różne schematy i w ATMEDZE i w PICu prawie zawsze są zewnętrzne rezystory.
Pytanko 2 dla super-speców: czy da się switch podłączyć pod linię danych wyświetlacza i nie marnując nóg procka zrobić klawiaturę. W tym czasie gdy na wyświetlacz nic nie wystawiamy procek "słucha" switcha?
Cytat:#include <avr/io.h>
#include <util/delay.h>

/* Konfiguracja - na którym porcie i na wyprowadzeniach puszczamy sterowanie LCD */
#define DEF_PORT DDRA /* wpisujemy DDRA, DDRB, DDRC, DDRD - zależy który port będzie obsługiwał wyświetlacz */
#define LCD_PORT PORTA /* wpisujemy, który port ma wysyłać dane do wyświetlacza - 4 starsze bity portu (7,6,5,4) */
/* podłączamy odpowiednio do wyjść D7, D6, D5, D4 wyświetlacza */
#define LCD_RS 3 /* które wyprowadzenie PORTU będzie linią RS */
#define LCD_E 2 /* które wyprowadzenie portu ma być linią E */
/* koniec konfiguracji. Pamiętajcie że numeracja wyprowadzeń PORTU zaczyna sie od "0" */

void bajt_lcd(unsigned char znak)
{
LCD_PORT = (LCD_PORT & 15)|(znak&240);
LCD_PORT |= (1<<LCD_E);
LCD_PORT &= (~1<<LCD_E);
LCD_PORT = (LCD_PORT & 15)|(znak<<4);
LCD_PORT |= (1<<LCD_E);
LCD_PORT &= (~1<<LCD_E);
_delay_ms(10);
}

void napis_lcd(char tab[])
{
LCD_PORT = LCD_PORT|(1<<LCD_RS);
int i=0;
while(tab[i]!=0)
{
bajt_lcd(tab[i]);
i=i+1;
}
}


void init_lcd(void)
{
DEF_PORT = 0xf0|(1<<LCD_RS)|(1<<LCD_E);
unsigned char i;
for(i=0;i<3;i++)
{
LCD_PORT = (LCD_PORT&0x0f)|(0x30&0xf0);
LCD_PORT |= (1<<LCD_E);
LCD_PORT &= (~1<<LCD_E);
_delay_ms(50);
}
LCD_PORT = (LCD_PORT&0x0f)|(0x20&0xf0);
LCD_PORT |= (1<<LCD_E);
LCD_PORT &= (~1<<LCD_E);
_delay_ms(50);
bajt_lcd(0x28); // Interfejs 4-bit, Wyświetlacz dwuwierszowy, Matryca znaków 5x7
bajt_lcd(0x01); // czyszczenie i przesuniecie na poczatek LCD
bajt_lcd(0x0e); // włączenie wyświetlacza kursor widoczny niemrygający
}

Czy ten kod dla portu A jest prawidłowy? nazwy portów pokazałem jako tekst pogrubiony.

P.S. wczytałem plik nowy.hex i nic się nie wyświetla. W kompilacji nie mam errorów.
Janku, czy potrafisz skompresować katalog z zawartością tego niedziałającego projektu i przesłać tu, na forum jako załącznik ? Tak jak ja to robię z lekcjami, wtedy będę mógł sprawdzić to u siebie i być może znajdę błąd.

Dzisiaj widocznie lepszy dzień,zrobiłem od nowa i poszło normalnie, przerobiłem wszystkie porty i na każdym jest ok.Wyświetla się napis "napis_"
Cytat:Janku, czy potrafisz skompresować katalog z zawartością tego niedziałającego projektu i przesłać tu, na forum jako załącznik ?

No problem.

P.S. Czy 4 młode bity wyświetlacza mają być podłączone do masy (czyli D3, D2, D1, D0 do masy)
(27-01-2012 14:22)SP5IWI napisał(a): [ -> ]Dzisiaj widocznie lepszy dzień,zrobiłem od nowa i poszło normalnie, przerobiłem wszystkie porty i na każdym jest ok.Wyświetla się napis "napis_"
... tak trzymaj ... napisz co było nie tak.

SQ9JXB, to było do Janka SP5IWI Smile
U mnie na płycie ewaluacyjnej są podłączone do masy, ale widziałem kilka schematów w sieci na których te młodsze bity były niepodłączone więc pewnie zadziała w obu przypadkach.
(27-01-2012 13:54)SQ9JXB napisał(a): [ -> ]Czy ten kod dla portu A jest prawidłowy? nazwy portów pokazałem jako tekst pogrubiony.
Jeżeli zmieniłeś tylko DDRD na DDRA i PORTD na PORTA to TAK, powinno działąć na porcie A
SQ9JXB napisał(a):P.S. wczytałem plik nowy.hex i nic się nie wyświetla. W kompilacji nie mam errorów.
Wcześniejsze lekcje Ci działały, a ta dziewiąta nie działa ??
Posprawdzaj jeszcze raz wszystkie połączenia. Janek SP5IWI też miał problem ale znalazł rozwiązanie
Cytat:Wcześniejsze lekcje Ci działały, a ta dziewiąta nie działa ??

Tak poprzednie lekcje działają bez problemu.

Połączenia portu A tak jak np. w lekcji 6.

Teraz wczytałem nowy.hex i .................nie wyświetla nic.

Mam ustawiony maksymalny kontrast wyświetlacza, włączam zasilanie i kwadraciki górnej linii są widoczne, i po 8 sekundach znikają.
Stron: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
Przekierowanie