-
11. Data: 2011-02-08 21:44:53
Temat: Re: Początek zabawy z bascomem
Od: Adam Dybkowski <a...@4...pl>
W dniu 2011-02-08 09:50 Adam napisał(a):
> Chciałbym rozpocząć naukę programowania AVRów, na początek w Bascomie.
Zła decyzja. Zacznij od C (avr-gcc).
--
Adam Dybkowski
http://dybkowski.net/
Uwaga: przed wysłaniem do mnie maila usuń cyfry z adresu.
-
12. Data: 2011-02-08 21:50:47
Temat: Re: Początek zabawy z bascomem
Od: Adam Dybkowski <a...@4...pl>
W dniu 2011-02-08 21:27 janusz_kk1 napisał(a):
>>> Oczywiście, na pewno walka z jakimś AVRGCC czy czymś takim zajmie
>>> więcej czasu - ale ogólnie to się ogromnie opłaci.
>>
>> Ale co jest w C takiego trudnego? Przecież to jest intuicyjny język.
> Jasneeee :)
> Tak na szybko ci znalazłem:
> c_size_mul = ((MMC_Data_16[9] & 0x03) * 2) + ((MMC_Data_16[10] >> 7) &
> 0x01);
Hmmm, a cóż w tej konstrukcji różni się od zapisu w BASICu (BASCOMie)?
Chodzi o magiczne operatory & oraz >> czy może o dostęp do dziewiątego i
dziesiątego elementu tablicy MMC_Data_16 (bo zapis z nawiasami
kwadratowymi jest powszechny, nawet w BASICu)? W języku Pascal używanym
często w szkołach do nauki podstaw programowania zapis byłby tylko
bardziej rozwlekły ale nie odbiegał znacząco od wersji C:
c_size_mul := (MMC_Data_16[9] and 3) * 2 + ((MMC_Data_16[10] shr 7) and 1);
Nie widzę znaczącej różnicy i to samo zapisane w BASCOMie będzie też
prawie identyczne. W jaki lepszy sposób BASICiem wyciągniesz dwa
najmłodsze bity z jednego bajtu tablicy oraz najstarszy bit kolejnego
bajtu i odpowiednio je poskładasz?
--
Adam Dybkowski
http://dybkowski.net/
Uwaga: przed wysłaniem do mnie maila usuń cyfry z adresu.
-
13. Data: 2011-02-08 22:52:15
Temat: Re: Początek zabawy z bascomem
Od: "Lelek@" <n...@n...pl>
"janusz_kk1" <j...@o...pl> wrote in message
news:op.vqlpstzr1cvm6g@jk-laptop...
Dnia 08-02-2011 o 20:10:26 Lelek@ <n...@n...pl> napisał(a):
> Tak na szybko ci znalazłem:
> c_size_mul = ((MMC_Data_16[9] & 0x03) * 2) + ((MMC_Data_16[10] >> 7) &
> 0x01);
> powiesz mi zgłowy co się w jakiej kolejności robi?
Ale to jest bardzo intuicyjny zapis. Zaczyna się od środka nawiasów. Jeżeli
wiesz czego chcesz to to właśnie to zapisałeś.
-
14. Data: 2011-02-08 23:01:37
Temat: Re: Początek zabawy z bascomem
Od: "Lelek@" <n...@n...pl>
"Artur A." <n...@m...com> wrote in message
news:iisd2r$6as$1@news.onet.pl...
> Hehe, mi kiedyś krzywdę zrobiło numerowanie linii oraz goto w Basicu.
> Przejście do procedur w Pascalu troszkę bolało.
>
> Adam, moim zdaniem nauka programowania AVR w C jest bardziej
> przyszłościowa, ale na początek może Bascom też będzie ok (osobiście nie
Ja bym radził zacząć pisać w assemblerze żeby zrozumieć później jak działają
wskaźniki :-) Chociażby po to :-) I w ogóle co to jest ta pamięć i jakie są
jej rodzaję i czemu raz trzeba do Z ładować adres o połowę mniejszy niż do
ramu :-)
-
15. Data: 2011-02-08 23:19:29
Temat: Re: Początek zabawy z bascomem
Od: "neuron" <n...@n...pl>
>Jasneeee :)
>Tak na szybko ci znalazłem:
>c_size_mul = ((MMC_Data_16[9] & 0x03) * 2) + ((MMC_Data_16[10] >> 7) &
>0x01);
>powiesz mi zgłowy co się w jakiej kolejności robi?
Czytanie cudzego kodu zawsze jest trudne. Gorzej jak sie nie daje odczytac
wlasnego.
Jako ze mam juz na karku ponad 4 dychy a zaczynalem programowac w asemblerze
na starego poczciwego z80 ( i nie mialem zadnych problemow ze sterownikiem
do programatora - mial on klawiature 16tkowa i trzeba bylo przepisac caly
kod bajt po bajcie, zmiana w programie i 2kb znowu bajt po bajcie - to
dopiero uczylo myslenia)
to pozwole sobie zwrocic uwage na kilka spraw natury ogolnej.
Komentarze - do takiego kodu jak powyzszy przydaje sie komentarz - dzis
pamietasz - jutro nie. Mlodym wilkom komentarze wydaja sie zbedne ale radze
wyrabiac sobie ten nawyk - bo to ma byc nawyk
- kazdy kod ma byc skomentowany. Po pierwsze przyda sie na
starosc(doslownie), po wtore przyda sie gdy przyjdzie pracowac zespolowo.
Refaktoring. Tak to juz jest ze gdy walczy sie z danym zagadnieniem to sie
czesto przerabia kod na wariata, dodaje jakies zmienne, proboje tak, a moze
tak, a jak jeszce nie chce dzialc....
Gdy wreszcie kod dziala tak jak tego oczekiwalismy wyglada jak pobojowisko.
Refaktoring to w uproszczeniu przepisanie kodu tak aby robil to samo ale aby
byl optymalny, czytelny i gotowy do zastoswania w przyszlosci - wiem, wiem
,nie chce sie jak o 4 nad ranem wkoncu uzyskalo sie efekt
ale warto zrobic to natychmiast a nie dopiero jak zabraknie ROMu ;)
Co do odwiecznej dyskusji o wyzszosci jednych swiat nad drugimi - c,pascal,
basic - jeden .... - albo sie umie myslec jak maszyna albo nie. Kazdy kto
chce nazwac sie programista powinien napisac choc jeden
program w assemblerze. Jeden starczy - kiedys programowanie w assemblerze
bylo trendy - dzis jest marnotrastwem czasu ale .... to uczy jak dziala
procesor i uczy jak dziala kompilator - nie jest istotne jak cos zapiszemy w
c lub bascomie - istotne jest czy aby na pewno kumamy co z tym zrobi
procesor.
W przypadku kolegi Adama bascom ma jedna zalete i jedna wade ktora jednak
tez jest zaleta i radze z nich skorzytac. Juz po 2-3 tygodniach mozna
zbudowac konkretne, dzilajace urzadzenia i to calkiem zlozone. To daje
motywacje do dalszej zabawy - to zaleta. Wada jest to ze bardzo ale to
bardzo ciezko uzyskac jakakolwiek wspolbieznosc - jesli nie chcemy aby nam
wyswietlacz nie zdychal podczas odbioru RC5 to trzeba sie napocic. Ale to
zaleta bo po pierwsze zmusza do myslenia a po wtore zmusza do zmiany
narzedzi na cos bardziej elastycznego ( c nie jest lepsze od bascoma - jest
ELASTYCZNIEJSZE) .Do swiadomej zmiany. I to jest zaleta tej wady ;)))
wojtek
www.neuron.com.pl
CMMS Maszyna
Golem OEE
Hall2007
-
16. Data: 2011-02-09 00:03:01
Temat: Re: Początek zabawy z bascomem
Od: "sundayman" <s...@p...onet.pl>
Mam wrażenie, że wywołem niepotrzebną dyskusją nad wyższością Świąt
Wielkanocnych nad Bożego Narodzenia...
A nie o to mi szło. Rzecz jest w takiej sytuacji :
Mamy kolegę, który jak sądzę jest ogólnie początkującym programistą (bo
gdyby np. znał C, to pewnie nie pytał by o Bascoma).
No i teraz tak - Bascom jest super. Naprawdę. Prostota i wygoda z jego
stosowania jest powalająca.
Tylko że w tym właśnie tkwi problem :)
Jak już wspomniałem, jak trzeba szybko napisać prosty program, to nie ma
lepszego narzędzia.
Potrzebujesz odczytać coś po 1wire - nie ma sprawy - na wszystko jest gotowa
komenda.
Wystarczy poszukać w helpie - i gotowe.
Tyle - że wcześniej czy później, okaże się , że trzeba wziąć inny procesor.
I co wtedy ? Szukać innego basica ?
No, na PIC to jeszcze się znajdzie. Ale na inne niekoniecznie.
Jednym słowiem - ucząc się Bascoma - nauczysz się tylko tego, co pozwoli
pisać proste programy tylko i wyłącznie na AVR.
Ucząc się C - otwierasz sobie drogę do programowania wszystkiego -
literalnie :)
Trudność nie polega na składni. Tego można się łatwo nauczyć.
Problem, to linkery, pliki naglówkowe i wszystkie te cudawianki, których nie
ma w Bascomie - bo w nim nie ma niczego - piszesz x linijek i gotowe.
Drugi problem, to że w Bascomie znajdziesz na wszystko gotowe polecenia - w
C już niekoniecznie.
Ale - gdybym dzisiaj stał przed takim wyborem - wybrałbym C.
Też zaczynałem od assemblera Z80, potem 6502 - to już człowiek pisał po
ciemku i zamkniętymi oczami.Ale dzisiaj myślę, że najlepiej umieć
pisać w C. Wtedy napiszesz wszystko i na każdą platformę - czy to
mikrokontroler duży czy mały, PC, Apple , Linux - wszystko.
A pisanie w Bascomie to przy tym jest jak zabawka - chociaż bywa bardzo
pożyteczna.
-
17. Data: 2011-02-09 07:31:35
Temat: Re: Początek zabawy z bascomem
Od: "Adam" <a...@w...pl>
>
> Zła decyzja. Zacznij od C (avr-gcc).
>
Dziękuję Wam wszystkim za odpowiedzi. Co do C - warto się zastanowić, nie
wykluczam rychłej przesiadki. 10 lat temu, na studiach, nauczono mnie trochę
pascala. I naprawdę pasował mi ten język, był prosty i konkretny choć mało
elastyczny. Z mikrokontrolerami jednak nie miałem nigdy do czynienia. Na
razie moim celem jest wogóle uruchomienie jakiegokolwiek programu :)
Jeśli chodzi o programator - znalazłem coś takiego jak avrdude. Po
"wskazaniu" go w bascomie i wklepaniu w "Parameter" takiej linii:
"avrdude" -p m16 -P com1 -c jtag1 -U flash:w:"{FILE}":a -U
flash:v:"{FILE}":a
można wgrać program do atmegi16.
I tu pojawił się kolejny problem.... Wrzuciłem do procka coś takiego (z
mikrokonrolery.net):
Config Portb = &B11111111
Config Portd = &B11111100
Portb = &B11111111
Portd = &B11111111
Do
If Pind.0 = 0 Then
Portb.7 = 0
End If
If Pind.1 = 0 Then
Portb.7 = 1
End If
Loop
Prosty przerzutnik RS - 2 przyciski i dioda LED. Sam program działa dobrze,
ale z tym portem B jest coś nie tak - dioda czasem sama zapala się i gaśnie
w losowych momentach. Może ktoś podpowie o co chodzi? Jak ustawię inne porty
jako wyjście to nie ma problemu. Tylko B i to na wszystkich pinach. Na pewno
nie są to jakieś stany nieustalone na wejściach - są podciągnięte do + i
mają b krótkie przewody. O co tu chodzi? Może to przez te "fusebity" na
których się nie znam. Zresztą w bascomie nie znalazłem zakładki w której
możne by je modyfikować.
Moje pierwsze wrażenia - droga od postanowienia "nauczę się
mikrokontrolerów" do uruchomienia PIERWSZEGO programu okazała się
nadspodziewanie trudna. Wszystkie te programatory, programy pomocnicze
(avrdude), ustawienia, fusebity, oscylator - całe to "know how"
(przygotowanie procesora) to chyba najgorszy etap. Samo pisanie programu
podejrzewam będzie już znacznie przyjemniejsze.
Dziękuję, pozdrawiam
Adam
-
18. Data: 2011-02-09 09:03:09
Temat: Re: Początek zabawy z bascomem
Od: janusz_kk1 <j...@o...pl>
Dnia 08-02-2011 o 22:50:47 Adam Dybkowski <a...@4...pl> napisał(a):
> W dniu 2011-02-08 21:27 janusz_kk1 napisał(a):
>
>>>> Oczywiście, na pewno walka z jakimś AVRGCC czy czymś takim zajmie
>>>> więcej czasu - ale ogólnie to się ogromnie opłaci.
>>>
>>> Ale co jest w C takiego trudnego? Przecież to jest intuicyjny język.
>> Jasneeee :)
>> Tak na szybko ci znalazłem:
>> c_size_mul = ((MMC_Data_16[9] & 0x03) * 2) + ((MMC_Data_16[10] >> 7) &
>> 0x01);
>
> Hmmm, a cóż w tej konstrukcji różni się od zapisu w BASICu (BASCOMie)?
> Chodzi o magiczne operatory & oraz >> czy może o dostęp do dziewiątego i
> dziesiątego elementu tablicy MMC_Data_16 (bo zapis z nawiasami
> kwadratowymi jest powszechny, nawet w BASICu)? W języku Pascal używanym
> często w szkołach do nauki podstaw programowania zapis byłby tylko
> bardziej rozwlekły ale nie odbiegał znacząco od wersji C:
>
> c_size_mul := (MMC_Data_16[9] and 3) * 2 + ((MMC_Data_16[10] shr 7) and
> 1);
>
> Nie widzę znaczącej różnicy i to samo zapisane w BASCOMie będzie też
> prawie identyczne. W jaki lepszy sposób BASICiem wyciągniesz dwa
> najmłodsze bity z jednego bajtu tablicy oraz najstarszy bit kolejnego
> bajtu i odpowiednio je poskładasz?
Bo akurat pod ręką nie miałem lepszego przykładu, a chciałem udowodnić że
wykonwywanie
kilku operacji w jednej linijce skutecznie ją zaciemnia, ten przykład
oczywiście nie jest trudny. Właśnie nie mogę odnaleść tego kodu w którym
była taka perełka.
>
--
Pozdr
JanuszK
-
19. Data: 2011-02-09 09:05:50
Temat: Re: Początek zabawy z bascomem
Od: janusz_kk1 <j...@o...pl>
Dnia 08-02-2011 o 22:41:36 Michoo <m...@v...pl> napisał(a):
> W dniu 08.02.2011 22:25, janusz_kk1 pisze:
>> Dnia 08-02-2011 o 21:53:16 Michoo <m...@v...pl> napisał(a):
>>
>>> W dniu 08.02.2011 21:27, janusz_kk1 pisze:
>>>> Dnia 08-02-2011 o 20:10:26 Lelek@ <n...@n...pl> napisał(a):
>>>>> Ale co jest w C takiego trudnego? Przecież to jest intuicyjny język.
>>>> Jasneeee :)
>>>> Tak na szybko ci znalazłem:
>>>> c_size_mul = ((MMC_Data_16[9] & 0x03) * 2) + ((MMC_Data_16[10] >> 7) &
>>>> 0x01);
>>>> powiesz mi zgłowy co się w jakiej kolejności robi?
>>> Co robi widać na pierwszy rzut oka. Kolejność jest nieistotna i może
>>> się zmienić.
>>
>>>
>>>> N o ile ci to zajęło?
>>> Z 1.5 .. 2 sec?
>> No to co najmniej o 1,5sek za długo, pomyśl teraz że takich linijek masz
>> wiecej, tracisz dużo czasu na analizę, przy prostym kodzie analizujesz
>> kilkakrotnie szybciej.
> Składanie wartości binarnej leżącej w dziwnym miejscu nie jest "proste"
> samo w sobie.
>
> Przy "prostym" kodzie zapisanym równie nieintuicyjnie byłoby gorzej -
> trzeba by przeanalizować kilka linii, pojąć ich sens a potem pojąć sens
> całości. No chyba, że dasz przykład takiego "prostego" kodu?
>
>>> Chociaż dłuższa analiza pozwala się oczywiście zastanawiać czy *2 nie
>>> powinno być dla konsekwencji zapisane jako przesunięcie binarne
>> Kompilator i tak to zoptymalizuje.
> Ale tu chodzi o zapis a nie o optymalizację.
> Kod zajmuje się złożeniem wartości z bitów leżących "na przełomie"
> bajtu. Operuje na poziomie bitów więc | jest znacznie bardziej
> intuicyjny niż +, który sugeruje operację matematyczną a nie logiczną.
> Tak samo wartość ma być _przesunięta o jeden bit_ względem początkowej a
> nie _dwa razy większa_.
>
> c_size_mul = ((MMC_Data_16[9] << 1) & 0b110) | (MMC_Data_16[10] >> 7) &
> 0b001);
Juz Adamowi odpowiedziałem, gdzieś ostatnio w kodzie znalazłem taką perełkę
ale nie mogę jej znaleść, ten przykład co dałem był akurat prosty,
ale skłądanie kilku operacji w jednej lini skutecznie ją zaciemnia.
Ja sobie piszę komentarze co dana linia robi, ale z cudzym kodem jest
problem bo trzeba sie zastanowić.
--
Pozdr
JanuszK
-
20. Data: 2011-02-09 09:32:39
Temat: Re: Początek zabawy z bascomem
Od: J.F. <j...@p...onet.pl>
On Wed, 09 Feb 2011 10:03:09 +0100, janusz_kk1 wrote:
>>> c_size_mul = ((MMC_Data_16[9] & 0x03) * 2) + ((MMC_Data_16[10] >> 7) &
>>> 0x01);
>>
>Bo akurat pod ręką nie miałem lepszego przykładu, a chciałem udowodnić że
>wykonwywanie
>kilku operacji w jednej linijce skutecznie ją zaciemnia, ten przykład
>oczywiście nie jest trudny. Właśnie nie mogę odnaleść tego kodu w którym
>była taka perełka.
Oczywiscie sa perelki zaciemnione doskonale, ale jak chcesz powyzsze
rozbic na kilka linijek zeby bylo czytelne ? Chyba ze tak
c_size_mul = ((MMC_Data_16[9] & 0x03) << 1)
+((MMC_Data_16[10] >> 7) & 0x01);
J.