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 - 25-01-2012 23:41 Zakładam że wiesz co to jest napięcie ... Zaczne od wyjasnienia co to jest "stan logiczny": Maszyny cyfrowe takie jak komputer, kalkulator, zegarek elektroniczny, odtwarzacz mp3, GPS.... są to urządzenia kóre dokonują obliczeń, ciągle coś liczą i liczą gdy są uruchomione. Wynikiem ich przeliczeń może być dźwięk z "empetrójki", obraz na teoim telefonie komórkowym, obraz w telewizorze, plik z rysunkiem płytki drukowanej .... Urządzenia te zbudowane są z układów które komunikują się między sobą za pomocą 0 i 1 (zer i jedynek) - czyli "rozmawiają w języku binarnym". Ale jak syłają między sobą "słowa" zbudowane z zer i jedynek ?? Ktoś to mądrze wymyslił - za pomocą napięcia elektrycznego, które zmienia sie w czasie. Wystąpienie napięcia ( 5Volt ) oznacza 1 - inaczej "stan wysoki" , zaś brak napięcia ( 0Volt ) oznacza 0 - inaczej stan niski. Więc jeżeli na jakimś wyprowadzeniu układu cyfrowego pojawi się taki przebieg napięcia w czasie :[attachment=4584] (patrz tylko na czerwony wykres - dane) to będzie to oznaczało że : w pierwszej milisekundzie na wyprowadzeniu układu jest stan wysoki ( 1 ) w 2 ms na wyprowadzeniu jest stan niski ( 0 ) w 3 jest też ( 0 ) w 4 jest ( 1 ) w 5 jest ( 0 ) w 6 jest ( 0 ) w 7 jest ( 1 ) w 8 jest ( 1 ) ... i tak dalej ... Postać binarna ( bitowa ) będzie zatem taka jak na górze rysunku, czyli 10010011101. Czerwony przebieg jest przykładem szeregowego sposóbu komunikacji ... bo kolejne bity następują po sobie - nie ma możliwości przesłać więcej niż jednego bitu na raz w jednej jednostce czasu. Jeżeli mieli byśmy np. 8 wyprowadzeń (tyle jest w każdym POrcie Atmegi32 ) i na każdym z tych wyprowadzeń jest co innego w tej samej jednostce czasu (możemy w jednej milisekundzie przesłać 8 bitów na raz czyli jeden bajt ) - taki sposób przesyłu danych nazywa sie równoległym.... tak w uproszczeniu. Teraz spróbuję wytłumaczyć ci czym jest "ciąg": Ciąg to pewnien zbiór elemmentów które sa uporządkowane w określonej kolejności - nie chodzi o uporządkowanie od najmniejszej do największej czy na odwrót. Elementy te wystepuja kolejno po sobie - czyli jeden za drugim. Przykład ciągu liczbowego ( zapis tego przykładowego ciągu ) : ( 4, 23, 19, 36, 1, 7 ) powiedzmy że to ciąg sześciu liczb wylosowanych w dużym lotku w takiej kolejności w jekiej wypadły kule z bębna. Przykład ciągu znakowego : ( t, o, _, j, e, s, t, _, c, i, ą, g ) .... z ilu elementów składa się ten ciąg ?? no jasne że z 12 . W języku C też używamy ciągów liczbowych i znakowych - nazywaja się tablicami [/color] dla powyższych przykładów ciągów pokażę odpowiedniki tablic w języku C : nasz ciąg liczb z totolotka będzie wyglądał tak ( 4, 23, 19, 36, 1, 7, /0 ) ... znacznik /0 jest znacznikiemm końca tablicy (ciągu) - jeżeli Atmega natrafi na niego to wie że skończył się ciąg i może zakończyć operację jego przetwarzania. Podobnie z ciągiem znakowym : jego elementy to kolejno : ( t, o, _, j, e, s, t, _, c, i, ą, g, /0 ) . Można w języku C określić tablicę podobnie: Kod: char tab[] = {'c', 'i', 'ą', 'g', '_', 'z', 'n', 'a', 'k', 'ó', 'w', ' '}; Kod: char tab[] = "ciąg_znaków"; Teraz kwestia zmiennych typu char i int .... Napisałeś, że wiesz co to jest bit i bajt ... zatem zmienną typu char jest zmienna 8-bitowa ( 1-bajtowa ) przyjmująca wartości ze zbioru liczb calkowitych od -128 do +127. Zaś zmienna typu int to zmienna 16 bajtowa przyjmująca wartości również ze zbioru liczb całkowitych od -32768 do +32767. W języku C deklarujemy (tworzymy) zmienną którą będziemy potem używać. Robi sie to tak : Kod: char x; Po jej deklaracji (utworzeniu) ma ona wartość "0" (zero). Jeśli chcielibyśmy żeby miała wartość 47 to musimy napisać pod deklaracją: Kod: x = 47; Kod: char x=47; RE: Programowanie w języku C w środowisku AVR Studio4 - SP9LAP - 26-01-2012 1:00 Witam! Proponuję omówić po linijce program z lekcji nr 5, bo prawdę mówiąc "utraciłem chwilowo w tym momencie kontakt z bazą" na tyle, że nawet nie wiem o co spytać. RE: Programowanie w języku C w środowisku AVR Studio4 - SQ9JXB - 26-01-2012 8:48 Marcin teraz wszystko jasne z tym co napisałeś. Reszta pojmowana w stopniu zrozumiałym. Co do Atmegi 11- port D 12- 4 porty we/wy , również mogą pełnić inne funkcje, ale nie bardzo rozumiem sposób numeracji wyprowadzeń Atmegi. Ale myślę że w dokumentacji Atmegi to wyczytam RE: Programowanie w języku C w środowisku AVR Studio4 - SP4EJT - 26-01-2012 15:39 (26-01-2012 1:00)SP9LAP napisał(a): Witam!Ale weś napisz, tu linijki kodu których nie rozumiesz. bp jak zaczne sie rozwodzić nad wszystkimi to mi dnia nie starczy . (26-01-2012 8:48)SQ9JXB napisał(a): 11- port DJesteś pewien ? Pamiętam jak napisałeś SQ9JXB napisał(a):Dopiero wprowadzenie poprawki Kolegi Bogdana SP3IQ jest wyświetlenie ABCD_a to była "poprawka" dla wyświetlacza na porcie A SQ9JXB napisał(a):12- 4 porty we/wy , również mogą pełnić inne funkcje, ale nie bardzo rozumiem sposób numeracji wyprowadzeń Atmegi. Ale myślę że w dokumentacji Atmegi to wyczytammoże źle mnie zrozumiałeś, chodzi mi o to że np. PORT C ma wyprowadzenia: PC0, PC1, PC3, PC4, PC5, PC6, PC7. Czyli od zera do 7. Jeszcze Ci powiem o rejestrach ... poniżej kilka przykładów rejestrów które już mogłeś zobaczyć w moim kursie: DDRA, DDRB, DDRC, DDRD, PORTA, PORTB, PORTC, PORTD, PINA, PINB, PINC, PIND. Rejestr to tak jakby 8-bitowa (czyli jednobajtowa) pamięć, której zawartość zmieniasz poprzez przypisanie np. Kod: DDRA=0b01100101; DDRx to rejestry odpowiedzialne za ustawienie "kierunkowości" wyprowadzeń PORTUx - czyli ustawia poszczególne wyprowadzenia portu na wejścia lub wyjścia wedle reguły 0 to wejście, 1 to wyjście. (tu akurat jest portA). PORTx to rejestry które sa odpowiedzialne za stan logiczny wyprowadzeń portów, wedle tej samej reguły co powyżej. zmianę tych stanów osiągamy na przykład poprzez Kod: PORTx=0b11110101; Kod: char y; Dobra... czas na to abyście nie tylko korzystali z gotowców ale też umieli sami zrobić projekt w AVR Studio. I właśnie taki zrobimy: 1. Włączcie AVR Studio - powinno wyskoczyć takie okno: [attachment=4602] 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, [attachment=4603]następnie klikacie "Next" i zaznaczacie to co na rysunku [attachment=4606] 3. Otworzy sie nowy projekt i jeden pusty plik ( nowy.c ). Wklejcie do niego poniższy kod Kod: #include <avr/io.h> [attachment=4607] i wklejcie w jego okienko to: Kod: /* Jest to plik do dziewiątej lekcji Kursu Programowania mikrokontrolera Atmega w języku C, Powinniście uzyskać efekt podobny do tego [attachment=4610] 6. Skonfigurujcie sobie na którym porcie macie wyświetlacz, Skompilujcie i uruchomcie. Napiszcie jeśli coś jest nie tak. Plik lcd_alfanum.h jest prostą biblioteką obsługi wyświetlacza, w oddzielnym pliku - układ taki powoduje przejrzystość projektu. Pisząc programy dobrze jest właśnie tak rozbijać (na pliki) poszczególne "biblioteki" obsługi urządzeń - np. do pbsługi syntezy DDS, do klawiatury komputerowej, do zegarka/kaledarza, do wyświetlacza TFT, do dekodera dźwięku, do termometru cyfrowego, itp. itd. Do każdego urządzenia jeden plik. dołaczamy je w prosty sposób do naszych projektów urzywając [code]#include "nazwa_pliku" - plik ten musi być umieszczony w tym samym katalogu co plik główny programu (tak na prawdę nie musi ale na razie przyjmijcie że tak jest - będzie Wam łatwiej) Na dole gotowiec. W kolejnych lekcjach będę powolutku dążył do programu obsługującego syntezę DDS AD9951 ... ale przed nami jeszcze kawałek drogi ... RE: Programowanie w języku C w środowisku AVR Studio4 - SQ9RFC - 26-01-2012 17:03 Marcin proponuję uprościć zapis w C 1. W lekcjach mieszasz zapis dziesiętny, heks i binarny - przejdź wyłącznie na binarny - jest bardziej intuicyjny. lekcja 5... - DDRA = 255; DDRB = 0x00; PORTB= 0x01; PORTA= 0b01010101; tak jest bardziej czytelnie : DDRA = 0b11111111; //wszystkie piny portu A ustawiam jako wyjścia DDRB = 0b00000000; //wszystkie piny portu B ustawiam jako wejścia PORTB= 0b00000001; // ??? PORTA= 0b01010101; // niektóre piny portu A ustawiam w stan wysoki (czyli zapalam LEDy :-) Nie rozumiem po co robisz zapis do portu który ustawiony jest do odczytu? Paweł sq6oxk stosowanie krótszej formy zapisu (wszelkiego rodzaju fistaszki przed czy po ...) w przypadku nauki programowania jest niepedagogiczne. Operatory matematyczne/logiczne/itd. dla początkującego muszą być identyczne z zapisem matematycznym ze szkoły podstawowej. x=x-10; jest intuicyjne, ale x-=10 już nie podobnie: PORTB = PORTB & 0b0000111 można się domyślić, ale PORTB &= 0x0F to już abstrakcja Trzeba również wyjaśnić co to są operatory arytmetyczne bo większość z nas nie wie co to znaczy <<,^,%,itd - przynajmniej te używane w przykładach. Jeszcze jedno ... My nie wiemy co robi E i RS z wyświetlaczem. My nie wiemy jak się steruje takim wyświetlaczem ... domyślam się że do wyświetlacza wysyła się jakieś komendy, dane do wyświetlania, może coś możemy z wyświetlacza odczytać ... Jest jakaś lista komend uniwersalnych typu: skasuj, ustaw pozycję wyświetlania, ustal wiersz ... ? RE: Programowanie w języku C w środowisku AVR Studio4 - SP4EJT - 26-01-2012 17:37 (26-01-2012 17:03)SQ9RFC napisał(a): Marcin proponuję uprościć zapis w CZrobiłem to celowo, aby każdy zrozumiał że zapis tej samej liczby można zrobić na wiele sposobów. Ja z początku tego nie zaczaiłem i miałem przez to problemy. Zawsze możesz we własnym zakresie sobie to przekonwertować, żaden kod podany przeze mnie nie jest na tyle duży by zajęło ci to więcej niż 5 minut czasu. Tu masz pomocnika : http://easycalculation.com/hex-converter.php SQ9RFC napisał(a):Paweł sq6oxk stosowanie krótszej formy zapisu (wszelkiego rodzaju fistaszki przed czy po ...) w przypadku nauki programowania jest niepedagogiczne. Operatory matematyczne/logiczne/itd. dla początkującego muszą być identyczne z zapisem matematycznym ze szkoły podstawowej.Dlatego droga do pilku obsługującego wyświetlacz była taka długa. Wprowadzanie nowych zagadnień w pierwszych lekcjach było bardzo powolne - nie sądzisz ? Takie małe dokładanie wiedzy było po to aby nie zalać Was zbyt dużą ilością nowych rzeczy. Poza tym jeśli już umiesz rozszyfrować zapis skrócony np. x-=1; lub PORTA&=0b11110000; to nie powinien on dla Ciebie stanowic już problemu bo juz to umiesz. Jeśli to ciągle sprawia ci problemy to potrenuj i po sprawie. Nauka to proces postępujący, przecierz mamy umieć coraz więcej a nie cofać się i robić coraz to bardziej prymitywne rzeczy. SQ9RFC napisał(a):Trzeba również wyjaśnić co to są operatory arytmetyczne bo większość z nas nie wie co to znaczy <<,^,%,itd - przynajmniej te używane w przykładach.Napisz mi, działania którego operatora używanego w lekcjach nie wyjaśniłem. Mi się wydaje, że wszystkie użyte przeze mnie zostały opisane na przykładzie. Jeśli tak nie jest to oczywiście wyjaśnię. Nie wyjaśniłem wszystki operatorów arytmetycznych i logicznych bo gdybym to zrobił niektórzy złapali by sie za głowę i pomyśleli "O Boże ! Tego jest tyle że nigdy tego nie zakumam, rezygnuję ... ", a tak mamy praktyczną rzecz - obsługę wyswietlacza. Jeśli zaczną występować inne operatory w moich lekcjach to oczywiście wyjaśnię zasadę ich działania - chyba że kursanci życzą sobie żebym zrobił to od razu to piszcie o tym. Wszystko co chcecie wyjaśnię, o ile będę to umiał. Jeżeli większość z Was chce, podobnie jak Jerzy, abym stosował tylko i wyłącznie zapis binarny to ja się do Was dostosuję i będzie tylko binarny - jak chcecie, tylko o tym napiszcie. Dla mnie to żadem problem, nawet będzie mi łatwiej. Tylko zastanawiam się czy to wyjdzie na dobre. (26-01-2012 17:03)SQ9RFC napisał(a):Oczywiscie że jest ... Czy zaglądaliście do tego symulatora LCD do ktorego link dałem w poście#25 ?? kliknij tu i szukaj na dole rego postu -> http://sp-hm.pl/thread-1161-post-11195.html#pid11195 Kilka linków: http://radzio.dxp.pl/hd44780/hd44780_podstawy.htm lub http://johnryder.wordpress.com/2007/01/24/alfanumeryczny-wyswietlacz-lcd-hd44780/ A w tym datashecie jest gdzieś ładna tabelka i algorytmy zalecanej inicjalizacji i inne takie [attachment=4612] RE: Programowanie w języku C w środowisku AVR Studio4 - SQ6ADE - 26-01-2012 20:32 A gdzie R/W w sterowaniu wyświetlacza Dzięki niemu można więcej.... RE: Programowanie w języku C w środowisku AVR Studio4 - SQ9RFC - 26-01-2012 20:57 (26-01-2012 20:32)SQ6ADE napisał(a): A gdzie R/W w sterowaniu wyświetlacza Na przykład....? Marcin dzięki za linki do wyświetlacza :-) a ten symulator fajniusi. Nadal dręczy mnie pytanie: po co robisz zapis do portu który ustawiony jest do odczytu? RE: Programowanie w języku C w środowisku AVR Studio4 - SQ6ADE - 26-01-2012 21:04 Nie tracić czasu proca i korzystać z informacji zgromadzonych w wyświetlaczu. Lektura obsługi sterownika HD-LCD wskazana. RE: Programowanie w języku C w środowisku AVR Studio4 - SP4EJT - 26-01-2012 21:44 (26-01-2012 20:32)SQ6ADE napisał(a): A gdzie R/W w sterowaniu wyświetlaczaNie umiem tego , nie wnikałem w to bo nie było mi potrzebne. (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 ... (26-01-2012 21:04)SQ6ADE napisał(a): Lektura obsługi sterownika HD-LCD wskazana.Wiesz co byłoby gdybym ja miał taki stosunek do swoich kursantów ? Napisałbym tak: "Lektura datashetu Atmegi, kompilatora WinAVR oraz Książki Język ANSI C wskazana. Dziękuję i powodzenia ! " .... ale myślę że to raczej by nie pomogło w nauce. Nie sądzisz ? |