Programowanie w języku C w środowisku AVR Studio4 - Wersja do druku +- HomeMade (http://sp-hm.pl) +-- Dział: Oprogramowanie (/forum-84.html) +--- Dział: Technika programowania mikroprocesorów (/forum-85.html) +--- Wątek: Programowanie w języku C w środowisku AVR Studio4 (/thread-1161.html) |
RE: Programowanie w języku C w środowisku AVR Studio4 - SQ8NVF - 12-05-2012 10:31 Tak ogólnie to dobrym pomysłem jest poznanie idei programowania w C podczas tworzenia programików na PC. Proste aplikacje konsolowe pozwalające zapoznać się z typami danych, operacjami bitowymi, stosowaniem wskaźników, struktur i uni czy też formatowania ciągu tekstowego za pomocą funkcji printf itp. Jest to szybsze - brak wgrywania wsadu do uP. Oczywiście mówię o podstawie języka C, później dochodzą 'kwiatki' w stylu dłubania w ustawieniach rejestrów, konfiguracji peryferii czy stosowania zmiennych o małym zakresie (8,16 bit).
RE: Programowanie w języku C w środowisku AVR Studio4 - SP5FCS - 13-05-2012 9:36 Skoro zaproponowałem uporządkowanie plików w tym kursie to na początek pokażę jak to powinno wyglądać, może na przykładzie wyświetlacza LCD. Nowa biblioteka sklada się z dwóch plików: - pliku źródłowego alfa_lcd.c; - pliku nagłówkowego alfa_lcd.h Plik nagłówkowy musi być wczytany w każdym module, który chce korzystać z funkcji napisanych dla wyświetlacza. Plik zawiera definicję nazw pinów do obsługi wyświetlacza oraz prototypy funkcji które będą dostępne w innych modułach. Do zabezpieczenia przed wielokrotnym wczytywaniem pliku nagłówkowego w wielu modułach służą dyrektywy kompilatora do warunkowej definicji ( #ifndef, #endif ). Kod: /* Plik naglowkowy dla wyswietlacza alfanumerycznego LCD Plik źródłowy na początku wczytuje własny plik nagłówkowy aby mieć te same definicje pinów, wcześniejsze wczytanie prototypów funkcji też nie przeszkadza a czasem przy skomplikowanych powiązaniach pomiędzy funkcjami nawet się przydaje. W tym pliku umieszczamy kod źródłowy funkcji wyświetlacza. Bywa tak, że znajdują się tu również pomocnicze funkcje, nazw których nie umieszczamy w pliku nagłówkowym ponieważ są one potrzebne tylko w module wyświetlacza. [attachment=5317] Na załączonym obrazku ekran z AVRstudio, na liście plików źródłowych widzimy dodatkowy plik do kompilacji alfa_lcd.c a na liście wczytanych plikow nagłówkowych alfa_lcd_h. Analogicznie należy przerobić plik z funkcjami do obsługi AD9951. Zmodyfikowane pliki w załączniku, kompilacja poprawna, nie mam w tej chwili modułu do sprawdzenia w układzie. RE: Programowanie w języku C w środowisku AVR Studio4 - SP5IWI - 19-05-2012 22:58 (11-05-2012 12:58)SP4EJT napisał(a): poniżej program-gotowiec, który zawiera zmiany o których napisałem w powyższym poście. Padł mi dysk i trochę mi zeszło na walce z kompem,jakoś nie mogę wrócić z AVRSTUDIO do stanu przed awarią mimo że wgrałem wszystko tak jak było wcześniej.Przetestowałem ostatnią wersję Marcina i działa OK.Testowałem też wersję Adama SP5FCS kompiluje się OK ale po wgraniu programu sterowanie syntezą jest jakieś dziwne,nie ma powtarzalności przy zmianie częstotliwości DDSa,nie zmienia się zgodnie z zaznaczonym krokiem,może to jest spowodowane tym że moja płyta EVB też się troszkę zbuntowała i nie mogę zainstalować programatora STK500v2 a może co innego.Jak znajdę trochę czasu to prześledzę listingi programu Adama to może wypatrzę jakąś niezgodność z moimi ustawieniami RE: Programowanie w języku C w środowisku AVR Studio4 - SP4EJT - 22-05-2012 23:02 Baaardzo przepraszam, że nie ma mnie tutaj z wami. Moja żona ma teraz egzaminy, i ostro zakuwa a ja z moją 7 miesięczną córką uciekam z domu w różne miejsca żeby się mogła pouczyć w spokoju. Męki te skończą się dopiero w ten weekend. Błagam o wybaczenie jeszcze kilka dni. Janek, najpóźniej w sobotę sprawdzę program poprawiony przez Adama oraz zrobię poprawkę z tymi plikami nagłówkowymi według jego przykładu, no i dodam obsługę SPI. Niestety nie mogę sobie teraz pozwolić na siedzenie po nocach przy AVRStudio tak jak to robiłem przy początku kursu. RE: Programowanie w języku C w środowisku AVR Studio4 - SP5IWI - 23-05-2012 20:13 (22-05-2012 23:02)SP4EJT napisał(a): Janek, najpóźniej w sobotę sprawdzę program poprawiony przez Adama oraz zrobię poprawkę z tymi plikami nagłówkowymi według jego przykładu, no i dodam obsługę SPI. Niestety nie mogę sobie teraz pozwolić na siedzenie po nocach przy AVRStudio tak jak to robiłem przy początku kursu. Ok,poczekam,popoprawiam w międzyczasie swoje sprzęty.Najdziwniejsze jest to że jak wgram program Adama to zgłasza się początkowo normalnie 20 MHz i krok 100 Hz a zmiana kroku powoduje że można wybierać albo 1HZ albo 10MHz,notomiast zmiana częstotliwości jest dość przypadkowa patrząć na wyświetlacz,oczywiście bo nie mierzyłem częstotliwości wyjściowej DDSa.Natomiast jak zresetuje program to już niemam nic na wyświetlaczu,testowałem kilkanaście razy i jest tak samo. Nic to walczę dalej tylko jak jest piękna pogoda to żagle wypierają komputer. RE: Programowanie w języku C w środowisku AVR Studio4 - SP4EJT - 27-05-2012 16:51 (23-05-2012 20:13)SP5IWI napisał(a): ... Najdziwniejsze jest to że jak wgram program Adama to zgłasza się początkowo normalnie 20 MHz i krok 100 Hz a zmiana kroku powoduje że można wybierać albo 1HZ albo 10MHz,notomiast zmiana częstotliwości jest dość przypadkowa...Sprawdziłem, wszystko grało oprócz tego że program wykonywał sie za szybko ( kompilator źle liczył wartości dla _delay_ ) dlatego wydawało Ci się że częstotliwość wyskakuje przypadkowa a krok leciał na maxa w lewo lub w prawo . Grzebałem i grzebałem ... i dogrzebałem. Przy okazji zmieniłem trochę poprawki Adama - mam nadzieję Adam, że się nie pogniewasz, że pozmieniałem nazwy plików, w które poprawiałeś. Żeby wszystko było OK należało to: Kod: #ifndef F_CPU [attachment=5357] Poniżej paczka, która ma już wszystkie poprawki odnośnie plików nagłówkowych - proszę tylko adama o sprawdzenie poprawności (program sprawdzony działa). Zwróćcie tylko uwagę na konfigurację wyprowadzeń do DDSa - PORTB ( CS do masy ! ). Taka konfiguracja połączeń będzie przy obsłudze portu SPI więc może nie zmieniajcie konfiguracji w programie tylko poprzełączajcie kabelki. [attachment=5358] Pozostało nam tylko dodać obsługę SPI aby odciążyć procesorek ... tymczasem czekam na ewentualne pytania. Tutaj przystępnie jest opisany port SPI. http://www.forbot.pl/forum/topics20/programowanie-spi-szeregowy-interfejs-urzadzen-peryferyjnych-vt2275.htm Jestem w trakcie zmieniania programu naszej syntezy właśnie pod tym kątem .............. Pytanie do ADMINA : Czy Admin jest w stanie sprawić żebym mógł edytować post który jest napisany godzinę temu ? Problem jest w tym że jak do postu napisanego przeze mnie wczoraj dołączy się kolejny znika opcja EDYTUJ.Zrobiłem wersję z SPI (jeszcze nie sprawdziłem w układzie - zrobie to jak wrócę do domu). Zmiany nastąpiły w plikach: nowy.c, AD9951.c i AD9951.h [attachment=5359] RE: Programowanie w języku C w środowisku AVR Studio4 - SP5IWI - 04-06-2012 18:36 SP4EJT Pliki nowy i nowy2 działają DDS startuje, natomiast ten z SPI nie,pusty wyświetlacz i DDS nie startuje Janek sp5iwi RE: Programowanie w języku C w środowisku AVR Studio4 - SP3GTG - 04-06-2012 22:10 Witam U mnie podobnie jak u Janka wszyskie programy łącznie z DDS-em działają poprawnie z wyjąkiem ostatniego -tego z SPI. Pozdrawiam Andrzej sp3gtg RE: Programowanie w języku C w środowisku AVR Studio4 - SP4EJT - 04-06-2012 23:51 Dobra ... namówiliście mnie ... idę zobaczę co za babola strzeliłem ... zaraz napiszę co i jak Edit: Eeeee.... jestem zbyt senny żeby szukać dalej błędu. Jutro zrobię od nowa przy płytce DDSa i oscyloskopie bo takie pisanie bez sprzętu to na nic jest. Dobranoc 1. W pliku nowy.c nie było kodu inicjalizującego SPI czyli funkcji init_spi(); ... jakk mogliście tego nie zauważyć ? Wpiszcie sobie to co jest na czerwono pomiedzę istniejące już linijki kodu - niebieskie init_lcd(); init_spi(); init_DDS(4); 2. W pliku AD9951.c należy dodać dwa znaki | w funkcji void init_spi() { DDRB |= ( 1 << PB7 ) | ( 1 << PB6 ) | ( 1 << PB5 ) | (1<<PB4); // MOSI, SCK, MISO, SS oraz w funkcji init_DDS { DDR_DDS |= (1<<DDS_UPDATE)|(1<<DDS_RESET); dodatkowo (na zielono) ustawiam równnież wyjście SS, czyli PB4, jako wyjście bo inaczej nie chce nic działać... to dziwne że w żadnym opisie o tym nie było ?! Po co są te znaczki (te na czerwono) ?? Po to : - kod poniższy ustawia cały bajt rejestru od nowa ( kasuje bity które były wcześniej ustawione a teraz nie są ) [code] DDR_DDS = (1<<DDS_UPDATE)|(1<<DDS_RESET); lub DDRB = ( 1 << PB7 ) | ( 1 << PB6 ) | ( 1 << PB5 ) | (1<<PB4); [\code] - często (teraz też) jest tak że nie chcemy zmieniać całego bajtu rejestru lecz tylko wybrane bity - i po to są te znaczki ( było o tym na wcześniejszych lekcjach ! ) ... dlatego nasz kod powinien wyglądać tak:[code] DDR_DDS |= (1<<DDS_UPDATE)|(1<<DDS_RESET); lub DDRB |= ( 1 << PB7 ) | ( 1 << PB6 ) | ( 1 << PB5 ) | (1<<PB4); [\code] Kto nie rozumie niech prosi o wyjaśnienie, będę wyjaśniał. Acha, i piszcie czy udało wam się uruchomić. Jak nie dacie rady wyślę gotowca, ale wolałbym żebyście się trochę pomęczyli i pogłówkowali RE: Programowanie w języku C w środowisku AVR Studio4 - SP3GTG - 07-06-2012 9:57 Witam Dzięki Marcin za poprawki, teraz wszystko działa OK. Szkoda, iż nasza grupa zrobiła się malutka, bo dla mnie ten kurs to świetna sprawa i dużo się nauczyłem, jest podstawą i zachętą do dalszej nauki . „Własna” synteza z AD 9951 bardzo cieszy, choć trzeba ją jeszcze rozbudować o różne funkcje niezbędne w TRx-ie. Dodam jeszcze, iż mój sterownik jest tani i bardzo łatwo jest na nim zmieniać konfigurację peryferii. To płytka próbna z prec. gniazdem pod Atmega32 + goldpiny dla DDS-a, programatora i wyświetlacza LCD, przyciski, kwarc i inne drobniejsze niezbędne elementy w/g schematu z #1 połączone kabelkami. Pozdrawiam Andrzej |