Goto page Previous 1, 2, 3 Next
sundayman
Guest
Wed Feb 09, 2011 1:03 am
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.
Adam
Guest
Wed Feb 09, 2011 8:31 am
Quote:
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
janusz_kk1
Guest
Wed Feb 09, 2011 10:03 am
Dnia 08-02-2011 o 22:50:47 Adam Dybkowski <adybkows12@45wp.pl> napisał(a):
Quote:
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.
Quote:
--
Pozdr
JanuszK
janusz_kk1
Guest
Wed Feb 09, 2011 10:05 am
Dnia 08-02-2011 o 22:41:36 Michoo <michoo_news@vp.pl> napisał(a):
Quote:
W dniu 08.02.2011 22:25, janusz_kk1 pisze:
Dnia 08-02-2011 o 21:53:16 Michoo <michoo_news@vp.pl> napisał(a):
W dniu 08.02.2011 21:27, janusz_kk1 pisze:
Dnia 08-02-2011 o 20:10:26 Lelek@ <nn@nndn.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
J.F.
Guest
Wed Feb 09, 2011 10:32 am
On Wed, 09 Feb 2011 10:03:09 +0100, janusz_kk1 wrote:
Quote:
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.
4CX250
Guest
Wed Feb 09, 2011 10:33 am
Użytkownik "janusz_kk1" <janusz_kk@o2.pl> napisał w wiadomości
news:op.vqmov0p11cvm6g@jk-laptop...
Quote:
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ć.
A co to jest? Kto zgadnie?
IF (a := b := c + d * e:= g/2) <= 10
Marek
RoMan Mandziejewicz
Guest
Wed Feb 09, 2011 10:56 am
Hello 4CX250,
Wednesday, February 9, 2011, 10:33:44 AM, you wrote:
Quote:
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ć.
A co to jest? Kto zgadnie?
IF (a := b := c + d * e:= g/2) <= 10
-> pl.comp.lang.c
--
Best regards,
RoMan mailto:roman@pik-net.pl
Nowa strona:
http://www.elektronika.squadack.com (w budowie!)
4CX250
Guest
Wed Feb 09, 2011 11:16 am
Użytkownik "RoMan Mandziejewicz" <roman@pik-net.pl> napisał w wiadomości
news:615914705.20110209105635@pik-net.pl...
Quote:
Hello 4CX250,
Wednesday, February 9, 2011, 10:33:44 AM, you wrote:
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ć.
A co to jest? Kto zgadnie?
IF (a := b := c + d * e:= g/2) <= 10
-> pl.comp.lang.c
Raczysz żartować. Programowanie jest nieodłączną częścią elektroniki.
A zresztą czego tylko się mnie przyczepiłeś? Wcześniejsi dyskutanci jakoś
się u ciebie wykupili czy co?
Marek
RoMan Mandziejewicz
Guest
Wed Feb 09, 2011 11:45 am
Hello 4CX250,
Wednesday, February 9, 2011, 11:16:03 AM, you wrote:
[...]
Quote:
A co to jest? Kto zgadnie?
IF (a := b := c + d * e:= g/2) <= 10
-> pl.comp.lang.c
Raczysz żartować. Programowanie jest nieodłączną częścią elektroniki.
Jasne. Ale _zabawy_ z językiem programowania, to zdecydowanie nie ta
grupa.
Quote:
A zresztą czego tylko się mnie przyczepiłeś?
Przyczepiłem? To tylko delikatna sugestia.
Quote:
Wcześniejsi dyskutanci jakoś się u ciebie wykupili czy co?
Nawet wiem, jak będziesz dyskutował z policjantem, jak Cię złapie na
przekroczeniu prędkości...
--
Best regards,
RoMan mailto:roman@pik-net.pl
Nowa strona:
http://www.elektronika.squadack.com (w budowie!)
4CX250
Guest
Wed Feb 09, 2011 11:50 am
Użytkownik "RoMan Mandziejewicz" <roman@pik-net.pl> napisał w wiadomości
news:715008297.20110209114523@pik-net.pl...
Quote:
Nawet wiem, jak będziesz dyskutował z policjantem, jak Cię złapie na
przekroczeniu prędkości...
Nawet wiem jak byś się zachował gdybyś to ty był tym policjantem.
Marek
neuron
Guest
Wed Feb 09, 2011 12:39 pm
Quote:
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ć.
strzelam calkiem z pamieci - na jednym porcie 4 bity robia za JTAGa - w
programtorze (!) , przy fusebitach gdzies powienienes miec opcje wylaczenia
JTAGa
Wylacz i bedzie OK
wojtek
www.neuron.com.pl
CMMS Maszyna
Golem OEE
Hall2007
Piotrek_P
Guest
Wed Feb 09, 2011 12:57 pm
Użytkownik "neuron" <nikogotuniema@no.pl> napisał w wiadomości
news:iitupq$idk$1@mx1.internetia.pl...
Quote:
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ć.
strzelam calkiem z pamieci - na jednym porcie 4 bity robia za JTAGa - w
programtorze (!) , przy fusebitach gdzies powienienes miec opcje
wylaczenia JTAGa
Wylacz i bedzie OK ;)
JTAG w Mega16 jak i w M32 jest na porcie C, a autor wątku pisze że jest
problem z portem C.
--
Pozdrawiam
Piotrek
Piotrek_P
Guest
Wed Feb 09, 2011 1:00 pm
Quote:
problem z portem C.
Oczywiście miało być B
--
Pozdrawiam
Piotrek
Mirek
Guest
Wed Feb 09, 2011 1:32 pm
Piotrek_P wrote:
Quote:
Oczywiście miało być B
Na B jest SPI - może niech odłączy programator
A tak poważnie to sprawdzenie schematu elektrycznego dwa razy... przez
dwie osoby - pamiętam jak z kolegą walczyliśmy programowo z zakłóceniami
od przekaźników, silnika, a się okazało, że procek nie był w ogóle
zasilany

dostawał tylko zasilanie z pull-up-ów.
Mirek.
RoMan Mandziejewicz
Guest
Wed Feb 09, 2011 1:44 pm
Hello 4CX250,
Wednesday, February 9, 2011, 11:50:49 AM, you wrote:
Quote:
Nawet wiem, jak będziesz dyskutował z policjantem, jak Cię złapie na
przekroczeniu prędkości...
Nawet wiem jak byś się zachował gdybyś to ty był tym policjantem.
Widzę, że jesteś typowym userem z dowcipu o tym, ilu takich trzeba do
wkręcenia żarówki. Bicie piany, trolling i dyskusje NTG.
--
Best regards,
RoMan mailto:roman@pik-net.pl
Nowa strona:
http://www.elektronika.squadack.com (w budowie!)
Goto page Previous 1, 2, 3 Next