Odpowiedz 
 
Ocena wątku:
  • 3 Głosów - 3.33 Średnio
  • 1
  • 2
  • 3
  • 4
  • 5
Programowanie w języku C w środowisku AVR Studio4
SQ8NVF Offline
Bartłomiej
***

Liczba postów: 144
Dołączył: 05-12-2009
Post: #151
RE: Programowanie w języku C w środowisku AVR Studio4
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).
12-05-2012 10:31
Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
SP5FCS Offline
Adam
*****

Liczba postów: 1,071
Dołączył: 02-02-2009
Post: #152
RE: Programowanie w języku C w środowisku AVR Studio4
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
----------------------------------------------------------------
dyrektyw kompilatora do podlaczenia pliku naglowkowego
#include "alfa_lcd.h"        //plik noglowkowy dla alfa. LCD

----------------------------------------------------------------*/
#ifndef    alfa_lcd_h
#define alfa_lcd_h            //definicja warunkowa

//Konfiguracja - na którym porcie i na wyprowadzeniach puszczamy sterowanie LCD
//Pamiętajcie że numeracja wyprowadzeń PORTU zaczyna sie od "0"

#define     DEF_PORT    DDRD        // DDRA, DDRB, DDRC, DDRD - port do obsługi wyświetlacza
#define    LCD_PORT    PORTD        //wpisujemy, który port ma wysyłać dane do wyświetlacza
                                    //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

//Prototypy funkcji
void init_lcd(void);    
void bajt_lcd(unsigned char znak);
void napis_lcd(char tab[]);

#endif
//--------------------------------------------------------------

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.

İmage

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.


Załączone pliki
.zip  nowy_sp5fcs.zip (Rozmiar: 54.29 KB / Pobrań: 698)

73 Adam
13-05-2012 9:36
Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
SP5IWI Offline
Janek
*

Liczba postów: 32
Dołączył: 01-02-2009
Post: #153
RE: Programowanie w języku C w środowisku AVR Studio4
(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.
Jeszcze nie przetestowałem, postaram się zrobić to wieczorem, ale może np. Janek SP5IWI wypróbuje Wink

Następnym krokiem będzie przygotowanie portu SPI Atmegi do pracy z naszym programem:
funkcję wysyłającą bajt do DDSa zamienimy na kod który wyśle bajt przez SPI...

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
19-05-2012 22:58
Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
SP4EJT Offline
Marcin
****

Liczba postów: 340
Dołączył: 06-05-2011
Post: #154
RE: Programowanie w języku C w środowisku AVR Studio4
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 Smile 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.
(Ten post był ostatnio modyfikowany: 22-05-2012 23:03 przez SP4EJT.)
22-05-2012 23:02
Odwiedź stronę użytkownika Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
SP5IWI Offline
Janek
*

Liczba postów: 32
Dołączył: 01-02-2009
Post: #155
RE: Programowanie w języku C w środowisku AVR Studio4
(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.
23-05-2012 20:13
Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
SP4EJT Offline
Marcin
****

Liczba postów: 340
Dołączył: 06-05-2011
Post: #156
RE: Programowanie w języku C w środowisku AVR Studio4
(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 Smile . 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
#define F_CPU 16000000
#endif
dodać do pliku lcd_alfanum.c możecie sobie na to popatrzeć. Do tej pory ten wpis był tylko w pliku głównym czyli main.c. Zabieg z plikami nagłówkowymi wymusza chyba dodawanie tego wpisu w każdy plik który zawiera _delay_ (czyli opóźnienia). Przeróbka Adama została przerobiona przeze mnie i wygląda teraz tak:

.zip  nowy.zip (Rozmiar: 55.23 KB / Pobrań: 680)
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.

.zip  nowy2.zip (Rozmiar: 57.19 KB / Pobrań: 677)
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/prog...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

.zip  nowy.zip (Rozmiar: 56.75 KB / Pobrań: 868)
(Ten post był ostatnio modyfikowany: 28-05-2012 13:14 przez SP4EJT.)
27-05-2012 16:51
Odwiedź stronę użytkownika Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
SP5IWI Offline
Janek
*

Liczba postów: 32
Dołączył: 01-02-2009
Post: #157
RE: Programowanie w języku C w środowisku AVR Studio4
SP4EJT
Pozostało nam tylko dodać obsługę SPI aby odciążyć procesorek ... tymczasem czekam na ewentualne pytania.[hr napisał(a):
Tutaj przystępnie jest opisany port SPI.
http://www.forbot.pl/forum/topics20/prog...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

Pliki nowy i nowy2 działają DDS startuje, natomiast ten z SPI nie,pusty wyświetlacz i DDS nie startuje
Janek sp5iwi
04-06-2012 18:36
Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
SP3GTG Offline
Andrzej
**

Liczba postów: 50
Dołączył: 21-08-2009
Post: #158
RE: Programowanie w języku C w środowisku AVR Studio4
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
(Ten post był ostatnio modyfikowany: 15-06-2012 2:40 przez SP3GTG.)
04-06-2012 22:10
Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
SP4EJT Offline
Marcin
****

Liczba postów: 340
Dołączył: 06-05-2011
Post: #159
RE: Programowanie w języku C w środowisku AVR Studio4
Smile 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ć ? Tongue
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 Tongue
(Ten post był ostatnio modyfikowany: 06-06-2012 0:07 przez SP4EJT.)
04-06-2012 23:51
Odwiedź stronę użytkownika Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
SP3GTG Offline
Andrzej
**

Liczba postów: 50
Dołączył: 21-08-2009
Post: #160
RE: Programowanie w języku C w środowisku AVR Studio4
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
(Ten post był ostatnio modyfikowany: 15-06-2012 2:43 przez SP3GTG.)
07-06-2012 9:57
Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
Odpowiedz 


Skocz do:


Użytkownicy przeglądający ten wątek: 2 gości