Początek zabawy z bascomem

Witam

Chciałbym rozpocząć naukę programowania AVRów, na początek w Bascomie. Znajomy udostępnił mi taką płytkę ewaluacyjną do ATMegi16: EVBavr05

formatting link
też programator na JTAG i RS-a: JTAGcable I
formatting link
jakiś kolega kolegi wykorzystywał to z Winavr i C. Czy można używać tego do programowania AVRów w BASCOM-AVR? Próbowałem go uruchomić, ale bascom niestety go nie zauważa... Wiem że google zna odpowiedzi na wszystkie pytania, jednak początkującemu jest bardzo ciężko się w tym połapać. Proszę wyjaśnijcie mi jak uruchomić ten programator w bascomie (jeśli wogóle się da).

pozdrawiam Adam

Reply to
Adam
Loading thread data ...

Użytkownik "Adam" snipped-for-privacy@wp.pl napisał w wiadomości news:4d510385$0$2437$ snipped-for-privacy@news.neostrada.pl...

Nie widzę Twojego na liście obsługiwanych przez Bascom programatorów, tyle że ja mam jakąś starą wersję. Zainstaluj sobie AVRStudio i spróbuj z niego zaprogramować procka, a nawet na początek wystarczy sprawdzić czy Ci procka wykryje. Powinno.

Reply to
Piotrek_P

Powitanko,

Nawet jak sie nie da, to zaden problem. Bascom tworzy plik wynikowy po kompilacji we wszystkich rozszerzeniach jakie sa potrzebne. Zaden problem zaimportowac ten plik do programu obslugujacego dany programator. Nie jest to az tak strasznie niewygodne.

Pozdroofka, Pawel Chorzempa

Reply to
Pawel "O'Pajak

To ja powiem coś, co się koledze bardzo nie spodoba... :) Nie kolega (na razie) zostawi tego bascoma, i spróbuje z C (tak tak wiem, że to masakra). Ale - problem jest taki, że wcześniej czy później okazę się, że bascom to jednak nie to. A przejście z bascoma na C jest znacznie trudniejsze niż w drugą stronę - wiem coś o tym niestety...

Żeby było jasne - sam korzystam z bascoma i to często - bo jak trzeba coś prostego zrobić szybko to się bardzo ładnie nadaje - i nie mam oporów moralnych :) Ale - jak musiałem się zabrać za C, z w końcu okazuje się że trzeba - to wtedy jest pot, krew i łzy.

To jest jednak prawda, że basicopodobne języki jakoś niestety chyba utrudniają potem przejście na inne - nie wiem czemu, ale tak to oceniam po sobie.

Oczywiście, na pewno walka z jakimś AVRGCC czy czymś takim zajmie więcej czasu - ale ogólnie to się ogromnie opłaci.

Reply to
sundayman

Ale co jest w C takiego trudnego? Przecież to jest intuicyjny język. Zamiast ldi r16,0 pisze się i =0; Do rejestrów pisze i czyta się przez "=". Nie rozumien skąd ta trudność. Znając C opanowałem javę na androida w tydzień w takim stopniu, że przeniosłem projekt z visuala do javy. Java jest jak C tylko głupsza. Baskomem to zrobisz sobie krzywdę :-)

Reply to
nn

Dnia 08-02-2011 o 20:10:26 Lelek@ snipped-for-privacy@nndn.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? N o ile ci to zajęło?, wg mnie wcale nie jest prosty, jak się samemu pisze to jest prosto, jak sie analizuje czyjeś programy to juz tak prosto nie jest.
Reply to
janusz_kk1

W dniu 08.02.2011 21:27, janusz_kk1 pisze:

Co robi widać na pierwszy rzut oka. Kolejność jest nieistotna i może się zmienić.

Z 1.5 .. 2 sec? Chociaż dłuższa analiza pozwala się oczywiście zastanawiać czy *2 nie powinno być dla konsekwencji zapisane jako przesunięcie binarne i czy | nie byłoby lepsze od +. Albo czy w ogóle rzutowanie na uint16_t nie miałoby sensu.

Reply to
Michoo

Dnia 08-02-2011 o 21:53:16 Michoo <michoo snipped-for-privacy@vp.pl napisał(a):

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.

Kompilator i tak to zoptymalizuje.

Reply to
janusz_kk1

W dniu 2011-02-08 20:10, Lelek@ pisze:

C to świetny język, ale dla początkujących ma jedną irytującą wadę. Łatwo jest w nim popełnić błędy nie wychwytywane przez kompilator, np "=" za if, albo niechciany średnik za for. Mam wrażenie, że inne języki tak nie mają.

Jak dla mnie jest przepaść między obiektowością Javy a strukturalnym C czasami lekko schodzącym do asemblera.

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 używałem), czasami szybsze uzyskanie efektu zachęca do dalszej zabawy i chroni przed poddaniem się. Zależy, czy masz pod ręką kogoś, kto Ci może pomóc.

Pozdrawiam!

Reply to
Artur A.

W dniu 08.02.2011 22:25, janusz_kk1 pisze:

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?

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);
Reply to
Michoo

W dniu 2011-02-08 09:50 Adam napisał(a):

Zła decyzja. Zacznij od C (avr-gcc).

Reply to
Adam Dybkowski

W dniu 2011-02-08 21:27 janusz_kk1 napisał(a):

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?

Reply to
Adam Dybkowski

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ś.

Reply to
nn

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 :-)

Reply to
nn

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

formatting link
CMMS Maszyna Golem OEE Hall2007

Reply to
neuron

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.

Reply to
sundayman

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

Reply to
Adam

Dnia 08-02-2011 o 22:50:47 Adam Dybkowski snipped-for-privacy@45wp.pl napisał(a):

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.

>
Reply to
janusz_kk1

Dnia 08-02-2011 o 22:41:36 Michoo <michoo snipped-for-privacy@vp.pl napisał(a):

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ć.

Reply to
janusz_kk1

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.

Reply to
J.F.

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.