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



Teraz jest 25 kwi 2024, o 06:21


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 37 ]  Przejdź na stronę 1, 2  Następna strona
Autor Wiadomość
PostNapisane: 11 lip 2012, o 14:26 

Pomógł: 0

Zgodnie z sugestią Mirka z tematu topic977.html

Mój problem wyjaśniony w w/w temacie, przedstawię jeszcze raz

Mamy sześć wyświetlaczy LED, do których za pomocą zmiennych cy1, cy2, cy3, cy4, cy5, cy6 wysyłamy z tabeli cyfry. Tablica deklarująca cyfry.

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


Jak widać cyfry są przesunięte względem standardowej tablicy ascii o wartość 0x30, czyli chcąc wyświetlić przylatującą "4" w ascii po RS232 od wartości cyfry "4" tj. 0x34 - 0x30 = 0x04 czyli czwarty element tablicy CYFRY, jest naszą zadeklarowaną czwórką po przez zapalenie odpowiednich segmentów. Podobnie jest z wartościami z kropką. Czyli przylatuje po RSie ramka -01,230CR000,450CRLF, a na wyświetlaczu 6cyfrowym musimy uzyskać -_1,230 (czyli pierwszy wyświetlacz cy1 wyświetla "-", w drugim cy2 wygaszamy "0", trzeci cy3 "1," (czyli dodatkowo przesuwamy wartość by uzyskać cyfrę z przecinkiem), cy4 daje "2", cy5 mamy "3" no i cy6 "0").

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


Sprawdzamy gdzie jest przecinek, rozdzielamy daną na dwa człony kg, i g (bo to wszystko dotyczy wyświetlania masy). Zgodnie z sugestiami Mirka, za pierwszym wywołaniem zdarzenia trafia nam pierwsza linia czyli -01,230 do pierwszego CR. Potem dzięki if( cnt > 1) ..., druga linia zostaje odrzucona, następnie znowu trzecia zostaje wyświetlona itd.

Problem jest następujący, część urządzeń niestety usuwa sama w ramce wysyłanej po RSie znaczące zera, czyli zamiast wysłać np. 001,320 wysyła 1,320 przez co pierwsza "tablica" kg się rozjeżdża.
Bo po pierwsze program musi sam "wiedzieć" gdzie zapalić przecinek, bo nośność jest różna, i przecinek może być np. 000,000 albo 000,00 albo 0000,0 albo może nie być wcale przecinka ;).

Czyli jak to stwierdził Mirek, sprawa się opiera wyłącznie na operacjach na tablicach. Bo primo, program musi sam ustawić właściwie przecinek na odpowiednim wyświetlaczu, secundo musi być odporny na zmienną ilość zer przed przecinkiem.

Nagrodą jest Atmega16
za najlepsze działające rozwiązanie. Zgodne z moimi potrzebami ;).
Chodzi mi tutaj wyłącznie o problem z tablicą kg, która przez to że ma zmienną długość jest dla mnie kłopotliwa ;).

Nie wiem, czy wystarczająco jasno podałem założenia. Ogólnie zadaniem będzie uodpornienie wyświetlania właściwie danej z przecinkiem niezależnie gdzie sie przecinek znajduje, jak również czy dana wysłana jest 001,230 czy 1,230.



Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 11 lip 2012, o 14:45 
Offline
Użytkownik
Avatar użytkownika

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

Ja pasuję za skomplikowane jak na moją głowę :(
:)

_________________
[b]San Escobar! Patria mia! Tu eres como la salud.[/b]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 lip 2012, o 14:50 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 14 paź 2011
Posty: 307
Lokalizacja: Lbt
Pomógł: 8

Ogólnie to chodzi o to, żeby dostawać te znaczące zera z przodu?, bo też zbytnio nie ogarniam:D

_________________
Ujemna delta to dopiero początek zabawy...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 lip 2012, o 14:56 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 14 lut 2012
Posty: 598
Lokalizacja: Warszawa
Pomógł: 13

A jak nie będzie minusa w ramce to co ma sie wyświetlić na pierwszym wyświetlaczu ?
Drugie pytanie a po co te literki w tablicy ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 lip 2012, o 16:33 
Offline
Moderator
Avatar użytkownika

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

Malutki_27 napisał(a):
A jak nie będzie minusa w ramce to co ma sie wyświetlić na pierwszym wyświetlaczu ?
Drugie pytanie a po co te literki w tablicy ?


Taka tylko luźna uwaga/spostrzeżenie, Malutki_27 - jesteś ostatnio jednym z najbardziej dynamicznie rozwijających się użytkowników naszego forum ;) .... (jak to teraz młodzież mówi: SZACUN)

_________________
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: 11 lip 2012, o 18:27 

Pomógł: 0

No jak nie ma minusa to w ramce występuje 0, czyli kod 0x30 w ascii, czyli zero.

Nie chodzi o to by dokładać zera, ale by uniewrażliwić funkcję wyświetlającą na wyświetlaczu LED poszczególne znaki, od długości danej w ramce.
Bo problem jest następujący, przylatuje jak już pisałem po RSie w jednym przypadku 001,230CR000,000CRLF, czyli dokładniej mówiąc pierwszą daną jest masa, drugą tara. Zgodnie z
pozp = strcspn (mybuf,",");
kg = (mybuf,",",&g);
.....

wiemy, że do zmiennej "tablicy" kg, przypisywana jest część 001 a do "tablicy" g, przypisywana jest część 230.
Teraz wiedząc dzięki funkcji strscpn, że na czwartym miejscu w tablicy mybuf jest przecinek, możemy "dodać", do zmiennej przekazywanej do cy3 offset, potrzebny do zapalenia danej cyfry z przecinkiem. W moim przypadku 0x14. Co widać na poniższym przykładzie z ifami
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Problem jest gdy już urządzenie samo zaczyna usuwać zbędne zera, czyli zamiast wysyłać 001,230.... wysyła 1,230. Przez co przypisania
cy1=tab[0]
cy2=tab[1] itd, się rozjeżdzają

Mam nadzieję, że nadążacie, jak nie to rozpiszę jeszcze dokładniej
Przypominam, że w ramce przecinek jest wysyłany przecież też w kodzie ASCII, czyli taki zapis 001,230CR000,450CRLF wysłany będzie jako następujące kody
ascii 30 30 31 2d 32 33 30 0d 30 30 30 2d 34 35 30 0d 0a
po rozdzieleniu na pierwsza i drugą linię dzięki bibliotekom Mirka
zostanie nam po drugim wywołaniu eventu w naszym buforze 30 30 31 2d 32 33 30, następnie po sparsowaniu funkcją strtok_r, dostajemy w tablicy kg -> 30 30 31 a w tablicy g -> 32 33 30 no i wiedząc że czwartym elementem tablicy jest przecinek (numeracja w C od zera) zapalamy odpowienio przecinek.
Ale przy wysłaniu 31 2d 32 33 30 0d 30 2d 34 35 30 0d 0a, analogicznie do tablicy kg trafia 31 (czyli jednak dana tylko), a do g 32 33 30. Mierząc teraz ilość elementów do znaku 2d (czyli przecinka) dostajemy 1, no a przecież nie możemy zapalić przecinka na pierwszym wyświetlaczu, tylko ciągle na trzecim, bo zakres pomiaru się nie zmienił. Nadal potrzebujemy dostać na wyświetlaczu LED 1,230 czyli wygaszone dwa pierwsze wyświetlacze.

Mam nadzieje, że teraz trochę jaśniej ;).

PS. Powoli się zastanawiam, czy nie lepiej było by mierzyć rozmiar g, zamiast kg bo wielkość tablicy g się nie zmienia, ale nie wiem jaka funkcja by sobie z tym poradziła bo strcspn mierzy ilość znaku do "," a nie od do końca. Coś mi się wydaje, że za samo zrozumienie problemu powinna być już jakaś nagroda ;);).
Części u mnie dużo, mogę coś dorzucić do tej atmegi ;). (Pewnie magazynu kolegi SunRivera nie pobije, bo najdalej po części to byłem w Bielsku białej :P)

-- 11 minutach --

Malutki_27 napisał(a):
A jak nie będzie minusa w ramce to co ma sie wyświetlić na pierwszym wyświetlaczu ?
Drugie pytanie a po co te literki w tablicy ?



Literki są do wyświetlania komunikatów error, ver, noData itp.
Chciałem zrobić zgodność miejsca w tablicy z kodami ascii, ale tablica zajmowała by strasznie dużo miejsca.
Po za tym i tak musiał bym robić dodatkowo kody dla cyfr z przecinkami, bo nie wpadłem jak wyświetlić na wyświetlaczu 2. 1. itp. pewnie dało by się jakoś za pomocą wskaźników, ale ostatnio i tak sukcesem jest umiejętność wykorzystania eventów (z bibliotek Mirka), oraz obsługi tablic za pomocą wskaźników, chociaż mi to opornie strasznie idzie.
Programowanie w C to dla mnie na razie chodzenie po omacku często. Nakupiłem Atmeg, bo boję się że te 10tyś możliwych zaprogramowań nie starczy do końca napisania programu ;).



Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 11 lip 2012, o 21:44 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 14 lut 2012
Posty: 598
Lokalizacja: Warszawa
Pomógł: 13

a z przecinkiem to by było jakoś tak ;)

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


-- 14 minutach --

mirekk36 napisał(a):
Taka tylko luźna uwaga/spostrzeżenie, Malutki_27 - jesteś ostatnio jednym z najbardziej dynamicznie rozwijających się użytkowników naszego forum ;) .... (jak to teraz młodzież mówi: SZACUN)



To są jakieś insynuacje i pomówienia ;)
Ja po prostu do perfekcji opanowałem kombinację copy & past

A tak na poważnie, to naprawdę mi miło słyszeć takie słowa od osoby z takim doświadczenem jak twoje :)
Biorąc pod uwagę moje ogromne wrodzone lenistwo :roll:



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 lip 2012, o 06:32 

Pomógł: 0

GwynBleidD napisał(a):
Czyli tak... obawiasz się, że gdy dane dostaniesz takie: 12,230CRLF to po rozdzieleniu tego na 2 części względem przecinka nie dostaniesz 3ch cyfr cechy liczby, ale 2 (bądź 1 przy 1 cyfrze) i tablica zostanie źle wypełniona. No i dobrze się obawiasz, bo przy tym kodzie się rozjedzie :) A jak to poprawić?

1. wygodnie by było zamiast cy1..cy6 utworzyć tablicę cy[6] i na niej operować - łatwiejszy później kod przy rozbudowie i można wygodniej tego używać



Nie wiem, czy uda mi się, zmienić bibliotekę Mirka do obsługi LEDów by zamiast zmiennych cy1 cy2....itd była tablica. Musiał bym ją przerobić na wskaźniki.
Zobaczymy, czy coś z tego zrozumiem i dam znać. (ps. trzeba będzie pomyśleć o dwóch nagrodach, jak by co ;)) Kolega Malutki_27 też zasłużył :).

Dobrze dam wam dziś znać, czy działa to zgodnie z założeniami, ewentualnie podsunę cały kod.

PS. Myślę, że zadanie jest dosyć ciekawe, obsługa liczb zmiennoprzecinkowych z wygaszaniem znaczących zer.



Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 12 lip 2012, o 09:43 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 14 lut 2012
Posty: 598
Lokalizacja: Warszawa
Pomógł: 13

Hehehe :) dzisiaj rano jeszcze wymyśliłem coś takiego, niestety nie mam jak tego przetestować ale powinno działać .....


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 lip 2012, o 11:50 
Offline
Moderator
Avatar użytkownika

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

Malutki_27 ---> chcesz HINT'a ???? tzn dobrą poradę ??? zawsze ale to zawsze - staraj się nawet dla siebie, tego typu zadania realizować w postaci oddzielnej funkcji, którą tylko wywołujesz z pętli głównej. Trzeba tylko podać jakieś tam argument lub argumenty i ew odebrać wynik jeśli jest potrzebny.

To niesamowicie ułatwia życie a osoba której to pokażesz też się od razu nauczy, że tak można, BA! że tak należy - a nie zacznie kombinować i masakrycznie rozbudowywać pętli głównej ok? ;)

Nie mówiąc już że i tobie się takie podchodzenie do zadań bardzo przyda. Jak najmniej rozlazłego kodu w pętli głównej programu - to niech będzie podstawowy wniosek z tego HINT'a ;)

_________________
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: 12 lip 2012, o 11:57 

Pomógł: 0

Widzisz Mirku, sam staram się tak pisać program, w dodatku dzięki tobie zrozumiałem trochę lepiej koncept eventów :).
Dzięki stosowaniu odwoływań do funkcji, bez zarzucania main, długaśnymi "procedurami", mamy większą przenośność kodu. Na zasadzie jak właśnie obsługa RSa w twoim wykonaniu, dajemy jako parametr wskaźnik do tablicy i event nam zwraca wskaźnik do tej samej tablicy z załadowaną linią :D.



Ostatnio edytowano 12 lip 2012, o 13:27 przez rezasurmar, łącznie edytowano 2 razy

Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 12 lip 2012, o 12:48 
Offline
Moderator
Avatar użytkownika

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

rezasurmar napisał(a):
Dzięki stosowaniu odwoływań do funkcji, bez zarzucania main, długaśnymi "procedurami", mamy większą przenośność kodu. Na zasadzie jak właśnie obsługa RSa w twoim wykonaniu, dajemy jako parametr wskaźnik do tablicy i event nam zwraca wskaźnik do tej samej tablicy z załadowaną linią :D.


Nawet nie wiesz ile mi radości sprawia to co piszesz ;) - gdy wiem, że udało mi się przekazać tą MEGA WAŻNĄ IDEĘ ;)

_________________
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: 12 lip 2012, o 12:58 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 14 lut 2012
Posty: 598
Lokalizacja: Warszawa
Pomógł: 13

mirekk36 napisał(a):
Malutki_27 ---> chcesz HINT'a ???? tzn dobrą poradę ??? zawsze ale to zawsze - staraj się nawet dla siebie, tego typu zadania realizować w postaci oddzielnej funkcji, którą tylko wywołujesz z pętli głównej. Trzeba tylko podać jakieś tam argument lub argumenty i ew odebrać wynik jeśli jest potrzebny.

To niesamowicie ułatwia życie a osoba której to pokażesz też się od razu nauczy, że tak można, BA! że tak należy - a nie zacznie kombinować i masakrycznie rozbudowywać pętli głównej ok? ;)

Nie mówiąc już że i tobie się takie podchodzenie do zadań bardzo przyda. Jak najmniej rozlazłego kodu w pętli głównej programu - to niech będzie podstawowy wniosek z tego HINT'a ;)



Następnym razem postaram się poprawić :) , bo rzeczywiście to co dla mnie jest oczywiste nie koniecznie może być oczywiste dla innych.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 lip 2012, o 13:27 

Pomógł: 0

Niestety jak na razie wszystkie pomysły wykorzystują nie "bibliotekę" Mirka do obsługi LED, tylko uparcie usiłują wykorzystać tablicę znaków cy[], gdzie w bibliotece Mirka, nie ma możliwości przerzucania tego jako tablica, bo jest 6zmiennych cy1, cy2, cy3....itd. Niestety to nie to samo, co cy[1], cy[2] ..... itd. Przez co Pomysłów kolegi GwynBleidD i Malutki_27 nie bardzo mogę wdrożyć, przynajmniej nie na tym etapie mojej wiedzy ;).
Wiem, że najprościej było by zmienić odwoływanie się do zmiennych cy1.... jako do tablicy, ale nie bardzo wiem, jak przerobić bibliotekę obsługującą LEDy na tablice.



Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 12 lip 2012, o 13:41 
Offline
Użytkownik

Dołączył(a): 24 sty 2012
Posty: 1469
Pomógł: 56

rezasurmar napisał(a):
Niestety jak na razie wszystkie pomysły wykorzystują nie "bibliotekę" Mirka do obsługi LED, tylko uparcie usiłują wykorzystać tablicę znaków cy[], gdzie w bibliotece Mirka, nie ma możliwości przerzucania tego jako tablica, bo jest 6zmiennych cy1, cy2, cy3....itd. Niestety to nie to samo, co cy[1], cy[2] ..... itd. Przez co Pomysłów kolegi GwynBleidD i Malutki_27 nie bardzo mogę wdrożyć, przynajmniej nie na tym etapie mojej wiedzy ;).
Wiem, że najprościej było by zmienić odwoływanie się do zmiennych cy1.... jako do tablicy, ale nie bardzo wiem, jak przerobić bibliotekę obsługującą LEDy na tablice.

Ale przecież to jest prawie to samo ;) Wiem, wiem... prawie robi ogromną różnicę :lol:
Czy to jest ta biblioteka z rozdziału o multipleksowaniu?
Zobacz:
zamiat 6 zmiennych cy1 .. cy6 masz cy[0] .. cy[5]
To dlaczego obsługa miałaby się jakoś tak bardzo diametralnie zmienić? Przecież w ostateczności możesz do poszczególnych elementów tablicy odwoływać się tak jak pojedynczych zmiennych tylko cyferki zamykasz w nawiasy kwadratowe

_________________
Jestem początkujący i moje porady mogą być błędne



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 lip 2012, o 14:06 

Pomógł: 0

OK, zmieniłem obsługę LED, za pomocą tablicy, nie było to wcale takie trudne hehe ;)

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

Tak teraz wygląda część odpowiedzialna za wyświetlanie, czyli zamiast &cyfry[cy1] itd jest &cyfry[cy[1]],

Kolego Malutki_27 wrzuciłem twój kod wygląda to mniej więcej tak

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


Jest totalny rozgardiasz ;) lcd_int(cy[poz]); lcd_char(' '); wrzuciłem by zobaczyć co wydzielają poszczególne ify, szczerze mówiąc totalne głupoty, bo mimo że ramka danych jest cały czas taka sama, dane wyrzucane są różne.



Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 12 lip 2012, o 14:31 
Offline
Użytkownik

Dołączył(a): 24 sty 2012
Posty: 1469
Pomógł: 56

rezasurmar napisał(a):
OK, zmieniłem obsługę LED, za pomocą tablicy, nie było to wcale takie trudne hehe ;)

A widzisz :D

_________________
Jestem początkujący i moje porady mogą być błędne



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 lip 2012, o 15:03 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 14 lut 2012
Posty: 598
Lokalizacja: Warszawa
Pomógł: 13

I powinny być takie ......... bo nigdzie nie wiedzę abyś ustawiał ponownie zmienną poz oraz i .......
Postaram sie dzisiaj złapac chwilke czasu i sprawdzę to dokładnie na zywym organiźmie :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 lip 2012, o 15:36 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 05 maja 2012
Posty: 256
Pomógł: 3

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



Jeśli dobrze widzę, to rezasurmarowi wkradło się pytanie do tej części kodu:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Zatem tablica kończy się zawsze znakiem 0 (ASCII 0, nie "0" 0x30 ;))
Kolega Malutki_27 przelatuje tutaj do końca nieznanej długości tabeli inkrementując 'i' poznając tym samym poznając długość tablicy. Przydatne to mu jest, bo w kolejnej funkcji for leci od końca tablicy aż do jej początku, zatem od tej mybuf[i] do wartości mybuf[0].

Ale jeśli jest tak jak myślę, to nie łatwiej by było użyć i=sizeof(mybuf)?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 lip 2012, o 16:06 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 14 lut 2012
Posty: 598
Lokalizacja: Warszawa
Pomógł: 13

i co wtedy zwróci sizeof ? O ile dobrze pamiętam to rozmiar tablicy mybuf podany w bajtach. A co jak tablica będzie wypełniona w połowie ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 lip 2012, o 16:45 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 05 maja 2012
Posty: 256
Pomógł: 3

Aż po roku visual studio odpaliłem, by na szybko to sprawdzić :D
No sam zobacz, że pusta tablica pięciu znaków daje mi 5. Gdy wypełnię jednym znakiem tę tablicę to i tak mi 5 wychodzi. Chyba, że jestem zakręcony jak słoik i nie ogarniam czegoś oczywistego w projekcie zawartego, co też jest bardzo prawdopodobne ;)

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: 14 lip 2012, o 23:56 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 14 lut 2012
Posty: 598
Lokalizacja: Warszawa
Pomógł: 13

Noooo, prawie mam na ukończone, twoje znikające zera z przodu ;), latający pzrecinek. I jak na razie wykładam się na tym że jak przyjdzie wartość 6-cio cyfrowa np 100,000 to &%&% na słodko :| ale jak przyjdzie np: 1000,0 to jest ok .....
Więc chyba trzeba kombinować dalej ........



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 lip 2012, o 10:07 

Pomógł: 0

Żeby nie było, że zapomniałem ;) (ps. Kolega Malutki_27 najbardziej zasługuje na atmege16, daj znać na PW, gdzie mam wysłać tą atmegę).

Mnie wyszło chwilowo coś takiego, problemem, jest jeszcze odświeżanie, bo przy zmianie długości danej na krótszą zostają na bardziej znaczących wyświetlaczach stare dane. Czyli tablica nie jest zapełniana cała na nowo, w przypadku gdy następna ramka przyjdzie z krótszymi danymi. Przecinek ładnie się już sam przesuwa, znak '-' wyświetla. Brak mi jeszcze obsługi wygaszania znaczących zer, no i walczę z tą inicjacją tablicy w przypadku gdy następna ramka jest krótsza.
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
  
cytowanie selektywne  Cytuj  
PostNapisane: 18 lip 2012, o 10:22 
Offline
Moderator
Avatar użytkownika

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

Wszystko dobrze ale jak można być tak rozrzutnym i szastać typem int niepotrzebnie na prawo i lewo. To jest na prawdę bardzo zły sposób programowania. Wprawdzie domyślam się że być może krócej się pisze int niż uint8_t czy short int no ale takie kwiatki szybko doprowadzą kolegę do rwania włosów sobie z głowy

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


no tu używać int ??????? masakra :( .... szybko do poprawy

aaa ok załóżmy że w musisz korzystać z liczb ujemnych bo w pętli teraz widzę że sprawdzasz x>=0 .... ale to nadal nie oznacza żeby to było wytłumaczeniem dla int ;)

a typ int8_t to co ? ;) i już masz działania w ramach jednego bajtu (a wątpię żeby któryś z parametrów przekroczył zakres -128 do +127

_________________
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: 18 lip 2012, o 10:39 

Pomógł: 0

Aaa to mirku, no no, mea culpa (jak by powiedział SunRiver ;)). Przyznaję się bez bicia program pomagał mi napisać kolega z działu IT, który na co dzień pisze w C# stąd te inty ;).



Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 18 lip 2012, o 12:10 
Offline
Moderator
Avatar użytkownika

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

rezasurmar napisał(a):
Aaa to mirku, no no, mea culpa (jak by powiedział SunRiver ;)). Przyznaję się bez bicia program pomagał mi napisać kolega z działu IT, który na co dzień pisze w C# stąd te inty ;).


No no tak to bywa ;) bo programując na PC nie czuje się tych uciekających bajtów pod ręką .... Ale ja zawsze jak widzę to w programie to od razu oczy mnie pieką i muszę zwrócić uwagę ;) ... ale myślę że warto.

_________________
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: 18 lip 2012, o 13:50 

Pomógł: 0

Sam na to zwracam uwagę (program cały czas jest w fazie prototypu ;)), bo zaczynałem naukę programowania w asm na C64 ;), gdzie w 32KB dostępnej dla użytkownika pamięci można było robić cuda :).



Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 18 lip 2012, o 15:56 
Offline
Użytkownik
Avatar użytkownika

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

żeby tylko cuda :)

_________________
[b]San Escobar! Patria mia! Tu eres como la salud.[/b]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 lip 2012, o 13:41 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 14 lut 2012
Posty: 598
Lokalizacja: Warszawa
Pomógł: 13

Oki, chwilka spokoju w pracy to mogę pobuszować ;)

Trzymaj moją wersję, powinna spełniac wszytskie twoje wymagania :)
Funkcja "prasująca"
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Moja tablica znaków oraz definicja tablicy do przechowywania wartości

plik d_led.c

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


plik d_led.h

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


Oraz w bibliotece mkuart.c
zakomentuj to w przerwaniu od UART

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


Ponieważ działałem tylko na 4 wyświetlaczy LED oczywiście trzeba dopisać obsługę w przerwaniu dla dodatkowych LED
I powinno działać, przynajmniej mi działa :)

Edit: Kod został poprawiony ponieważ zawierał jeden dosyć poważny błąd.
Teraz działa w 100 % :)

W związku z tym rybę uważam za złowioną :D



Ostatnio edytowano 1 sie 2012, o 22:17 przez Malutki_27, łącznie edytowano 2 razy

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 lip 2012, o 07:48 

Pomógł: 0

Będę miał chwilę to przetestuję, podaj mi na pw swoje namiary, wyślę ci obiecaną Atmegę16 :).



Góra
  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 37 ]  Przejdź na stronę 1, 2  Następna strona

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