Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 11 maja 2026, o 18:01


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 15 ] 
Autor Wiadomość
PostNapisane: 12 mar 2013, o 17:20 
Offline
Nowy

Dołączył(a): 12 mar 2013
Posty: 6
Pomógł: 0

Witam

Dopiero zaczynam nauke C :). Mam prosty program - cos ala mini stroboskop z 3 trybami.
Procek Attiny13
Wybor trybow przyciskiem zwieranym do masy na PB4-jest na dlugim przewodzie.

Wyjscia poprzez 2 ledy PB0 i PB1
Listing:

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Kody umieszczamy w znacznikach syntax -- proszę zapamiętać... tym razem poprawiłem , następnym razem post ląduje w koszu..
kurcze nie mamy kosza ....... trudno ... zapamiętaj więc by używać SYNTAX :) ---> SunRiver



Ogolnie dziala ale mam 2 pytania:

1/ Zajmuje mi to 498 bajtow w Eclipse a identyczny soft w Bascomie jakies 10% mniej, co robie zle?

2/ po podciagnieciu pullup na poczatku programu (PORTB=16) musi byc DELAY chocby 2ms inaczej przy starcie procka (wlaczeniu zasilania) w polowie przypadkow rozpoczyna ok czyli od case1 ale w polowie przypadkow zaczyna od case2. Problemu nie ma gdyz dam zewnetrzny rezystor podciagajacy PB4 do +5V albo odlacze przycisk od wejscia procka ( przycisk na kilku metrowym przewodzie).
Dlaczego tak sie dzieje?
Zaznaczam ze przycisku nie naciskam, po prostu czasem procek startuje ok a czesem nie.
Napisalem podobny soft w Bascomie i jest taki sam efekt - tez trzeba dac opoznienie (Watims 20).

Wyglada tak jak by cos sie indukowalo w przewodzie przycisku i przeskakiwalo na Case2 zanim pullup sie podciagnie ?
Jestem zielony wiec moze ktos z wiedza podpowie:)

Inna sprawa przy DELAYu 20ms mam 498 bajtow a przy DELAYu2ms mam 502 bajty kodu wynikowego:)

Pozdrawiam
Slawomir



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 mar 2013, o 17:48 
Offline
Użytkownik

Dołączył(a): 04 paź 2011
Posty: 8631
Pomógł: 338

teraz postaram się odpowiedzieć ....

AD1 ... Nie wiem jak masz ustawioną optymalizację w Eclipse dla kompilera , ale to chyba niema większego znaczenia przy takim programie
taka zajętość miejsca ... owszem możesz uzyskać więcej stosując -Oo

Nie podoba mi się ilość delayów ..... ta biblioteka jest troche opasła ....

AD2 ... tak może tak być przy takiej długości przewodów moga się pojawiać jakieś zakłócenia natury indukcyjnej
szpilki symulujące przycisk... daj kondensatorek 100n do GND powinno pomóc



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 mar 2013, o 17:54 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 31 lip 2012
Posty: 157
Pomógł: 8

Kurcze zaś zostałem wyprzedzony:) Też takie stany się u mnie pojawiały chociaż przewody miały zaledwie kilkanaście cm. Podczas załączania komputera (przy zasilaniu z baterii). Się ruszyły elektrony w kabelku.

U mnie w Eclipse pe kompilacji wyszło 436 bajtów.

A i jeśli jeszcze Mirka niema zmień to
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


na takie
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 mar 2013, o 18:28 
Offline
Nowy

Dołączył(a): 12 mar 2013
Posty: 6
Pomógł: 0

Dzieki za podpowiedzi.

Przycisk jest na dlugim przewodzie i zwiera do masy.
Dodanie konsensatorka 100nF do masy (rownolegle z przyciskiem) nie pomoglo ale dodanie go miedzy PB4 a do +5V (czyli jak by rownolegle z wewnetrznym pullupem) naprawilo sytuacje.

Co do optymalizacji mam domyslnie Eclipse Os i to jest ponoc najlepsza optymalizacja.
Tzn. instalowalem WINAVR, potem Eclipse Indigo + AVRplugin

Zdziwilo mnie ze kod zajmuje mi wiecej niz w Bascomie :(
Rozumiem ze uzywajac delayu nie da sie tego kodu zmniejszyc.:(

A co do wielkosci kodu - klikam po prostu 'mlotek' i na dole w konsoli wyskakuje :
"Program: 500 bytes (48.8% Full)
(.text + .data + .bootloader)"
Takze nie wiem co zmieniles w ustawieniach ze masz tylko 436 bajtow.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 mar 2013, o 18:39 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 31 lip 2012
Posty: 157
Pomógł: 8

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


np. takie coś to jakby dwa razy to samo, a co jeśli by to było w pętli?? Poza tym te _delay(), napewno spowalniają to działanie, jeśli tylko to będzie robił układ to nie jest tak źle, powiedzmy zastępuje drgania styków, ale jeśli miałby robić coś jeszcze innego to lepiej timery. Np zrobić sobie takie flagi przerwania co 10, 100ms i z nich korzystać.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 mar 2013, o 18:43 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 26 gru 2012
Posty: 147
Lokalizacja: Zadupie/Wrocław
Pomógł: 6

kakadupoznan napisał(a):
Zdziwilo mnie ze kod zajmuje mi wiecej niz w Bascomie :(

Język językowi nierówny, z resztą to samo tyczy się kompilatorów - kompilacja tego samego programu przy użyciu różnych wersji tego samego kompilatora może dać różnice w wielkości pliku wynikowego. I tak jest wszędzie, nie tylko w przypadku mikroklocków - program komputerowy skompilowany przy użyciu Visual Studio 2010, 2012, MinGW oraz MinGW 64, jeśli tylko jest wystarczająco skomplikowany będzie różnił się nie tylko wielkością pliku wykonywalnego, ale nawet szybkością działania (a to wszystko przez różne w różnych wersjach oraz toolchainach algorytmy optymalizacji.)

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 mar 2013, o 20:23 
Offline
Nowy

Dołączył(a): 12 mar 2013
Posty: 6
Pomógł: 0

Ok, rozumiem.
A czy ktos ma mozliwosc kompilacji np AVR studio5 czy Atmel Studio 6 i poda wielkosc kodu wynikowego?

Pozdrawiam
Slawomir



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 mar 2013, o 20:48 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 31 lip 2012
Posty: 157
Pomógł: 8

Powiedz mi tak z ciekawości co to będzie za projekt, że aż tak bardzo zależy Ci na tej objętości kodu. Chyba lepiej pierwsze porozkminiać jak go zoptymalizować a dopiero później się głowić jak to ten Eclipse zrobił .



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 mar 2013, o 23:38 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 sty 2013
Posty: 1760
Pomógł: 196

Witam.
Na "zakurzonym" AVR Studio IV :
Cytuj:
Program: 498 bytes (48.6% Full)

A tak nawiasem mówiąc (pisząc :?: ) nie męczy Cię przeliczanie bin na dec ? :P



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 mar 2013, o 07:46 
Offline
Nowy

Dołączył(a): 12 mar 2013
Posty: 6
Pomógł: 0

Witam
Dziekuje za odpowiedzi.

Wlasciwie tak dla testu napisalem w C by sprawdzic objetosc.
Wiadomo Attiny13 (fajny maly procek) ma tylko 1kb a liczylem ze w C zejdzie zdecydowanie nizej niz Bascom ale zapewne przy tak prymitywnym programie nie ma czego optymalizowac...

Pozdrawiam



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 mar 2013, o 08:40 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 21 gru 2012
Posty: 161
Pomógł: 9

Wszystkie switch case zmien na ify, zobaczysz ile mniej zajmie program :)

Jakbys mogl wrzuc hexa wyprodukowanego przez bascom ;)

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 mar 2013, o 10:07 
Offline
Nowy

Dołączył(a): 12 mar 2013
Posty: 6
Pomógł: 0

kod Bascom ponizej - wychodzi 442 bajty.
Jesli uzyje w Bascomie 3 Ify zamiast select/case to objetosc kodu pozostaje ta sama.

Pozniej sprawdze w C uzycie 3 Ifow zamiast select/case
Pozdrawiam
Slawek
---------------------------------------
Składnia: [ Pobierz ] [ Ukryj ]
język basic4gl
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


------------------------ [ Dodano po: 16 minutach ]

Z ciekawosci zmienilem w C na 3 Ify, kod ciut mniejszy = 482 bajty.
Kod jak ponizej ale wyskoczyly mi 3 otrzezenia dotyczace linijek z Ifami
"suggest parentheses around assignment used as truth value" - linie24, 45,76
Czy cos namieszalem :) ?


KOD:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 mar 2013, o 10:28 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27460
Lokalizacja: Szczecin
Pomógł: 1045

Widzisz jakbyś pooglądał moje poradniki video do książek z bloga, chociażby ten:

http://mirekk36.blogspot.com/2012/12/ws ... a-bez.html

to zobaczyłbyś że pisząc warunki opłaca się pisać tak:

Kod:
if( 1 == tryb ) ...


a nie

Kod:
if( tryb == 1 ) ....


to wtedy uniknąłbyś takich kwiatków jakie tu popełniasz w kodzie ... bo jak widzisz zamiast sprawdzać czy tryb jest np = 1 to ty robisz operację (tryb=1) .... a if analizuje wartość tego wyrażenia czyli wartość zmiennej tryb .... a taki warunek będzie ZAWSZE spełniony :(

gdybyś pisał

Kod:
if( 1 == tryb ) ...

to nie wyskoczyłby ci WARNING tylko BŁĄD od razu i mógłbyś zareagować

ale po tym wszystkim widać, że twoim największym może kłopotem jest to że ignorujesz warningi .... a tymczasem powinieneś je traktować jak POWAŻNE BŁĘDY ..... zapamiętaj tę zasadę

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 mar 2013, o 18:36 
Offline
Nowy

Dołączył(a): 12 mar 2013
Posty: 6
Pomógł: 0

WItam
Faktycznie , masz racje :) i jest to opisane w niebieskiej ksiazce...

Mam pytanie jak mozna w prosty sposob (niestety C wydaje sie niecoooo trudny) zapisac zmienna. np TRYB (z listingu wyzej) do eepromu pod dana komorke?
W bascomie to proste a ten C to tragedia:(

Nie chce definiowac zmiennej od poczatku w Eepromie tylko definiuje zwykla zmienna TRYB (listing powyzej) a w danym momencie chca ja zapisac np. na pozycji nr 5 epromu.

Dopisalem po prostu w main : "eeprom_write_byte (5, tryb);" i nawet dziala tzn po kompilacji i podejrzeniu epromu Attiny13 faktycznie pod pozycja 5 jest wartosc "1" zamiast typowego "FF".
Oczywiscie dodalem na poczatku #include <avr/eeprom.h>
"Niemniej eclipse wyrzuca warning passing argument 1 of '__eewr_byte_tn13' makes pointer from integer without a cast"

Wiec cos pewnie spierd..., znaczy sie zepsulem:) Zreszta w C byloby to za proste, tu jest wszystko masakrycznie skomplikowane :(

Pozdrawiam



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 mar 2013, o 20:21 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27460
Lokalizacja: Szczecin
Pomógł: 1045

Wiesz jak ktoś chce się nauczyć C w 2-3 dni to zawsze będzie tak pisał jak ty wyżej :(

Piszesz że w Bascomie to proste ???? sorki - znam Bascoma - i powiem ci że w Bascomie są o wiele lepsze metody dostępu do EEPROM niż te które opisałeś wyżej a jak widać też ich nie znasz - więc nie mów że w Bascomie jest prościej .... masakra

W C jest prościej ale na pewno nie po kilku dniach nauki C ... no bez przesadyzmu ;) .... a poza tym to widzę że lecisz jakby cię ktoś rozżarzonym prętem po plecach tłuk .... i nawet nie doczytasz np na moim blogu - nawet nie obejrzysz poradnika i to nomen - koci - omen właśnie akurat do EEPROM'a ....

http://mirekk36.blogspot.com/2012/11/av ... iazek.html

dlatego na przyszłość proszę - jeśli chcesz się w "ATNEL CLUB" uczyć języka C ... to nie opowiadaj że C to masakra ;) że w Bascomie łatwiej. Bo jeśli tak jest - to może nie warto uczyć się tego C hmmm ? ;)

Ale ja jednak gorąco polecam ci C tylko troszkę więcej cierpliwości i po kolei ok ? ;)

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 15 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 2 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO