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 - SP4EJT - 27-01-2012 19:42 (27-01-2012 18:01)SQ9JXB napisał(a): Teraz wczytałem nowy.hex i .................nie wyświetla nic.1. Jaką masz wersję AVR Studio 4 ? 2. Czy korzystałeś z mojego gotowca czy robiłeś według przepisu z posta ? Sciągnąłem plik który umieściłeś i wgrałem twojego hexa , u mnie też to samo - czyli nie działa. Przy próbie ponownej kompilacji pokazuje błędy. Wlazłem w menu Project, Configuration Options i wpisałem częstotliwość tektowania atmegi w pole Frequency - pomogło - po kompilacji i wgraniu hexa działa. Pytanie do wszystkich : Czy mieliście takie same problemy z uruchomieniem tego ?? RE: Programowanie w języku C w środowisku AVR Studio4 - SQ9JXB - 27-01-2012 20:15 AVR Studio 4 Korzystałem z gotowca., zmieniłem tylko port na "A" Teraz wpisałem Frq Atmeg, kompilacja, wgranie hexa i dalej nic. Wstaw ten katalog spakowany tu na Forum, sprawdzę gdzie mam błąd RE: Programowanie w języku C w środowisku AVR Studio4 - SP4EJT - 27-01-2012 22:56 (27-01-2012 20:15)SQ9JXB napisał(a): AVR Studio 4Ja w domu mam 4.17.666 a w pracy 4.19, a jaką ty masz wersję ? [/quote] Mówiłes że kompilator nie wyswietla ci błędów. W takim razie wklej tu to co ci wyświetla - bo coś musi. A przy okazji sprawdź czy nie wystarczy na samym początku pliku nowy.c dopisać Kod: #define F_CPU 16000000 RE: Programowanie w języku C w środowisku AVR Studio4 - SP5IWI - 28-01-2012 0:39 (27-01-2012 22:56)SP4EJT napisał(a):Mówiłes że kompilator nie wyswietla ci błędów. W takim razie wklej tu to co ci wyświetla - bo coś musi.(27-01-2012 20:15)SQ9JXB napisał(a): AVR Studio 4Ja w domu mam 4.17.666 a w pracy 4.19, a jaką ty masz wersję ? A przy okazji sprawdź czy nie wystarczy na samym początku pliku nowy.c dopisać Kod: #define F_CPU 16000000 Ja mam 4.19 build 730 skompilowałem wpisałem wcześniej ręcznie częstotliwość kwarcu 16000000 i wgrałem do płytki.U mnie działa czyli kod jest ok RE: Programowanie w języku C w środowisku AVR Studio4 - SQ9JXB - 28-01-2012 7:54 Witam AVR Studio 4.19 Build 730. Cytat:rm -rf nowy.o nowy.elf dep/* nowy.hex nowy.eep nowy.lss nowy.map Teraz jest OK. Zabrakło jednego "0" (zera) w częstotliwości kwarcu. P.S. Przepraszam za opóźnianie lekcji. RE: Programowanie w języku C w środowisku AVR Studio4 - SP4EJT - 01-02-2012 16:39 Po dłuższej przerwie czas ruszyć dalej. Wspominałem że będę drążył temat obsługi syntezy DDS (AD9951), nię będe sie rozwodził na układach gorszych (tańszych) bo są beznadziejnej jakości - szkoda pchać ich nawet do prostych konstrukcji. A więc zaczynam lekcję 10 Będę powoli "budował" program sterujący układem AD9951, na początku wprowadzę zmienną o nazwie frequency (po polskiemu częstotliwość). Problemem który będziemy rozwiązywać będzie wyświetlenie tej częstotliwości na naszych wyświetlaczach. Ponieważ częstotliwość naszej syntezy będzie pomiędzy 0 a 150MHz musimy użyć zmiennej typu unsigned long int - czyli zmiennej 32-bitowej bez znaku (czyli przyjmującej tylko wartości dodatnie lub 0 - bo nie ma częstotliwości ujemnej). powiedzmy że częstotliwość ta na razie będzie stała i będzie wynosić 3710000 Hz. A więc musimy w głównym programie dodać Kod: unsigned long int frequency; Gdyby to była stała to byśmy skorzystali z nasze biblioteki i zrobili tak Kod: napis_lcd("3710000"); Ja rozwiązałem to tak: Kod: void wys_freq(unsigned long int xxx) Kod: wys_freq(frequency); Teraz wyjaśnię jak działa funkcja wys_freq(jakaś_zmienna) : 1. deklarujemy tablicę 10 elementową (numerujemu od zera) o nazwie freq_string typu char oraz zmienną i tego samego typu 2. ostatniemu elementowi tablicy przypisujemy 0 - będzie ono znacznikiem końca tablicy 3. pętla for ... tu trzeba poświęcić trochę miejsca na wyjaśnienie [attachment=4644] for(i=8; i>0; i-=1) oznacza : na początku i=8 ... wykonuj pętlę jeśli i>0 ... za każdym razem zmniejsz i o jeden. Pętla for za każdym razem wykona instrukcje pomiędzy nawiasami klamrowymi, czyli : i-ty element tablicy freq_stringbędzie równy reszcie z dzielenia zmiennej xxx (która dostała wartość zmiennej frequency czyli 3710000) ... wiadomo, że reszta z dzielenia liczby 3710000 przez 10 to zero ... nie możemy dosłownie wpisać 0 - musimy wpisać kod ASCII który odpowiada liczbie zero dlatego dodajemy 48. Drugi wiersz pomiędzy nawiasami pętli for dzieli zmienną xxx przez 10 - w następnej "turze" pętli xxx będzie 10 razy mniejsza. Pętla sprawdza czy i nadal jest większe od 0, jeśli tak to wykonują sie znowu polecenia zawarte pomiędzy nawiasami klamrowymi. Teraz na przykładzie ... zmienna frequency = 3710000 ... 1. na początku 8 element tablicy freq_string przyjmuje wartość 0 bo reszta z dzielenia 3710000 przez 10 równa się 0 2. 7 element tablicy przyjmuje wartość 0 bo reszta z dzielenia 371000 przez 10 równa się 0 3. 6 element tablicy przyjmuje wartość 0 bo reszta z dzielenia 37100 przez 10 równa się 0 4. 5 element tablicy przyjmuje wartość 0 bo reszta z dzielenia 3710 przez 10 równa się 0 5. 4 element tablicy przyjmuje wartość 1 bo reszta z dzielenia 371 przez 10 równa się 1 6. 3 element tablicy przyjmuje wartość 7 bo reszta z dzielenia 37 przez 10 równa się 7 7. 2 element tablicy przyjmuje wartość 3 bo reszta z dzielenia 3 przez 10 równa się 3 8. 1 element tablicy przyjmuje wartość 0 bo reszta z dzielenia 0 przez 10 równa się 0 Pozostaje nam jeszcze zerowy element tablicy za który odpowiada linijka kodu: Kod: freq_string[0]=xxx+48; Kod: napis_lcd(freq_string); Teraz wyjaśniam nowe rzeczy: % - to znak "modulo" czyli znak dzielenia z resztą ... Kod: a=x%y; 20%10 = 0 22%10 = 2 10%3 = 1 25%7 = 4 Wyedytujcie sobie plik nowy.c z lekcji 9 tak aby jego zawartość wyglądała tak: Kod: #define F_CPU 16000000 Przeanalizujcie to kilka razy na spokojnie a pewnie zrozumiecie. RE: Programowanie w języku C w środowisku AVR Studio4 - SQ9JXB - 01-02-2012 18:01 Cytat:Powinno się wyświetlić 3710000_ na wyświetlaczu. A nie czasami 003710000? Bo tak się u mnie wyświetla. I wyświetla mi po kompilacji 3 Warnings "Build started 1.2.2012 at 16:53:54 avr-gcc -mmcu=atmega32 -Wall -gdwarf-2 -std=gnu99 -DF_CPU=16000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT nowy.o -MF dep/nowy.o.d -c ../nowy.c ../nowy.c:1:0: warning: "F_CPU" redefined <command-line>:0:0: note: this is the location of the previous definition ../nowy.c: In function 'wys_freq': ../nowy.c:12:9: warning: array subscript has type 'char' ../nowy.c:9:16: warning: array subscript is above array bounds avr-gcc -mmcu=atmega32 -Wl,-Map=nowy.map nowy.o -o nowy.elf avr-objcopy -O ihex -R .eeprom -R .fuse -R .lock -R .signature nowy.elf nowy.hex avr-objcopy -j .eeprom --set-section-flags=.eeprom="alloc,load" --change-section-lma .eeprom=0 --no-change-warnings -O ihex nowy.elf nowy.eep || exit 0 avr-objdump -h -S nowy.elf > nowy.lss ECHO jest wyĄczone. AVR Memory Usage ---------------- Device: atmega32 Program: 532 bytes (1.6% Full) (.text + .data + .bootloader) Data: 0 bytes (0.0% Full) (.data + .bss + .noinit) Build succeeded with 3 Warnings... " RE: Programowanie w języku C w środowisku AVR Studio4 - SP5IWI - 01-02-2012 18:47 [/code]Powinno się wyświetlić 3710000_ na wyświetlaczu "U mnie 003710000_" Przy dwóch "warningach " ../nowy10.c:12:9: warning: array subscript has type 'char' ../nowy10.c:9:16: warning: array subscript is above array bounds Janek SP5IWI RE: Programowanie w języku C w środowisku AVR Studio4 - SP4EJT - 01-02-2012 18:55 no tak, 003710000 pisałem na szybkiego. Jeszcze nasz program nie jest dopracowany i wyswietla te dwa zera na początku, będę ajmował sie tym jakos na końcu bo to nie istotne. Poprostu wyświetla zawsze 9 cyfr. A co do tych WARNINGÓW to sam nie wiem czemu komplilator sie mnie czepia RE: Programowanie w języku C w środowisku AVR Studio4 - SQ8MHI - 01-02-2012 21:30 (01-02-2012 18:55)SP4EJT napisał(a): A co do tych WARNINGÓW to sam nie wiem czemu komplilator sie mnie czepiaNo ale "../nowy.c:9:16: warning: array subscript is above array bounds" to jest bardzo poważny warning. Ja myślę, że on jest po to, żeby kursantom pokazać, jak w C łatwo i prosto zrobić sobie kuku, jak się nie uważa z rozmiarami tablic. Kto zgadnie dlaczego? Wskazówka: deklaracja tablicy. |