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



Teraz jest 28 paź 2024, o 20:40


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 14 ] 
Autor Wiadomość
PostNapisane: 12 sie 2012, o 12:02 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

Wyrzuć static, bo odnosi się do tworzonych zmiennych a nie do argumentów funkcji.

_________________
Dragonus Cracovus: Biomagia



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

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

static nie odnosi się do argumentów funkcji -- tylko do zmiennych

------------------------ [ Dodano po: kilkunastu sekundach ]

heh... zaś byłeś pierwszy

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 sie 2012, o 16:29 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

Przykładowo dodajesz nową zmienną uint16_t dotOn, którą inkrementujesz w przerwaniu timera0 (zakładam, że jest dokładnie co 2ms). Gdy ta dotOn jest większa niż 499 to ją zerujesz. Tam, gdzie ustawiasz segmenty możesz sprawdzać czy zmienna jest mniejsza niż 250 i zapalać dodatkowo segment kropki lub wyświetlać tylko cyfrę w tym drugim przypadku.

Jeśli taktujesz 8MHz i masz preskaler 64 to, aby uzyskać dokładnie 2ms, a nie 2,048ms należy w przerwaniu wpisywać do TCNT wartość 6, wtedy do przepełnienia timera potrzeba już tylko 250 "tyknięć". 1 / 8000 000Hz * 64 * 250 = 2ms.

Jest też tryb pracy timera zwany CTC naucz się go używać, bo jest bardzo wygodny. W podstawowym trybie timera, gdyby nie było preskalera to wpisywanie musiałoby uwzględniać te kilka taktów, które upłyną od momentu przepełnienia timera do wejścia do funkcji obsługi przerwania (wtedy robi się tak: TCNT0 = TCNT0+6). W trybie CTC timer sam się ładuje i nie trzeba tego robić w przerwaniu.

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 sie 2012, o 17:17 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

Ten tryb nie nadaje się do tego, bo TCNT0 trzeba też w obsłudze przerwania zmieniać (da się to obejść tworząc nową zmienną globalną). Doskonale będzie działać w trybie CTC. Konfiguracja różni się przy ustawianiu bitów, wpisuje się do innego rejestru inna jest flaga przerwań i nazwa przerwania. Sprawdź sam. W razie kłopotów pomożemy.

Antystatyczny napisał(a):
W przypadku wyższych częstotliwości F_CPU trzeba zmienić preskaler na 1024.

To lepiej ustaw preskaler na 1024 i będzie dobrze od 1MHz do 50MHz

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 sie 2012, o 18:11 
Offline
Moderator
Avatar użytkownika

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

Antystatyczny napisał(a):
Nie bardzo wiem, jak się nazywa wektor przerwania :(
Wpisywałem ISR(TIMER0_OCR0_vector), ale kompilator marudzi.


A może tak warto czasem zajrzeć na mój blog na przyszłość ?

http://mirekk36.blogspot.com/2012/03/ec ... nazwy.html

_________________
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 sie 2012, o 01:00 
Offline
Moderator
Avatar użytkownika

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

Odpowiem krótko,

żadnych warningów nie miałem i nie mam w kodach z książki, a jak dalej kolega tak będzie rozwiązywał problemy, że jak coś nie wychodzi to znaczy że w książce jest źle i trzeba zrobić odwrotnie. Widzisz gdzieś tu na screenshocie poniżej warningi po kompilacji?

Obrazek

typ uint16_t na tablicę znaków !?!?!?!?!?!!

to będzie - tzn już jest masakra :( no koszmarek - i TO jest dopiero STRATA pamięci :(

funkcja led() ???? hmmm a cóż to za twór ??? Lookup'owanie w tej funkcji zamiast w przerwaniu ???? no no no

Kod przerwania - co to w ogóle jest ???

strasznie cieżko mi się do tego odnieść bo poza pewnymi podobieństwami ale drobnymi do tego o czym piszę w książce i pokazuję jak to zrobić - to twój sposób na multipleksowanie przypomina jako żywo sposoby prezentowane na elektrodzie w Bascomie ....

Nie wspomnę już że taka procedura obsługi przerwania zapewni ci duszki na nieużywanych segmentach - a wprowadzanie funkcji takich jak led() - to całkowicie nieoptymalne rozwiązanie - szkoda że dokładnie nie przeczytałeś tej mojej opowieści w książce o tym jak to się umawiamy że my jako zespół programistów mamy zrobić bibliotekę do multipleksowania dla drugiego zespołu

ja w tej lekcji przekazuję sporo ważnych informacji i nie tylko technicznych o timerach, odczycie z Flasha, pozbyciu się duszków, itp .... ale przede wszystkim prezentuję koncepcję takiego pisania programów aby oddzielać warstwę fizyczną od logicznej - i wyjęcie na zewnątrz samych zmiennych cy1, cy2, cy3 i cy4 (można to ew w postaci tablicy sobie zrobić) .... jest efektem takiego postępowania - czyli pewnego ważnego podejścia w programowaniu - a ty cofasz się do myślenia z Bascoma - wplatając koszmarne rozwiązanie z funkcją led() .... owszem będzie to działać - ale na własne życzenie robisz dwa kroki do przodu przechodząc z Bascoma na C, i jednocześnie 5 kroków do tyłu - tworząc takie rozwiązania

_________________
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 sie 2012, o 09:31 
Offline
Moderator
Avatar użytkownika

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

Antystatyczny napisał(a):
Czy chociaż plik nagłówkowy napisałem w miarę czytelnie?

Tak plik nagłówkowy wygląda OK czemu nie.

Więc wróć do 8-bitowych elementów w tej tablicy i jak zobaczysz warninga to podaj na drugi raz więcej szczegółów to podpowiem ci co źle robisz - bo jak mówię zamiana tego na 16-bitowe elementy to najgorsze co może być :( .... pomyśl sobie jeśli by to nie miało znaczenia dla działania programu to dlaczego np nie stworzyć np tablicy 64-bitowej:

uint64_t tablica[10];

_________________
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 sie 2012, o 21:40 
Offline
Moderator
Avatar użytkownika

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

No a napisz tak:

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

_________________
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: 14 sie 2012, o 21:00 
Offline
Moderator
Avatar użytkownika

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

Po pierwsze tym sposobem, który ci pokazałem chciałem dać do zrozumienia, że istnieje coś takiego jak domyślna promocja do typu int w AVR GCC. I te warningi z którymi się spotkałeś były właśnie za jej sprawką - ale zanim coś dalej powiem to przeczytaj uważnie ten artykuł:

http://atnel.pl/domyslna-promocja-do-typu-int.html

potem zrozum, że takie ustawianie wzorców znaków może czasem prowadzić do takich sytuacji z warningami gdy ustawiasz z negowaniem całego bajtu jego najstarszy bit, bo kompilator robiąc promocję do int "myśli" że chodzi o liczbę ujemną w kodzie uzupełnień do dwóch.....

dlatego można się tego pozbyć na dwa sposoby, jeden jak wynika z artykułu do którego link podałem wyżej, poprzez jawne rzutowanie do uint8_t i jak widzisz to pomaga....

a drugi sposób to po prostu zmienić całkowicie sposób definicji znaków. Pech bowiem chciał że gdy ja definiowałem własne znaki i na swoich wyświetlaczach to akurat nie tykałem najstarszego bitu i nie wyskoczył mi ten warning, inaczej albo bym opisał od razu to zjawisko albo zmieniłbym sposób definicji znaków, np za pomocą binarnej reprezentacji cyfr czyli

0xb001100101,
0xb100010101,
0x1111011011,

i tak dalej - to nie wywoła ci nigdy warninga bo podajesz można powiedzieć "stałe dosłowne"

--------------------------------

wracając do twoich znikających warningów a raz się pojawiających....

hmmm już tyle razy opisuję to w różnych wątkach, że aż mi ciężko powtarzać - ale ok, jeszcze raz wyjaśnię.

Jeśli popełnisz błąd, który owocuje WARNINGIEM po pierwszej kompilacji to nie dziw się, że po kolejnej kompilacji już tego warninga kompilator nie pokarze - BO TAK MA BYĆ ! takie jest założenie i słuszne zresztą - że jak programista nie chce żeby mu kompilator "truł" to wystarczy drugi raz przeprowadzić kompilację a potem trzeci czy czwarty i kompilator weźmie twarz w kubeł i już grzecznie nie przypomni

ALE ............. ALE - jeśli chcesz znowu zobaczyć gdzie były te warningi to użyj Pan opcji CLEAN zanim zrobisz BUILD - wtedy cały projekt się wyczyści z wstępnie pokompilowanych modułów i cała kompilacja pójdzie OD NOWA, przez co i warningi od nowa się zgłoszą

teraz jaśniej ?

---------------------------------

nie rozwiążę za to teraz twojej zagadki dlaczego przedtem ci działał kod a po chwili nie - bo sam prędzej do tego dojdziesz - wierzę ;)

_________________
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: 14 sie 2012, o 21:27 
Offline
Moderator
Avatar użytkownika

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

Ja bym ci chętnie podpowiedział gdzie masz błąd - ale sam go nie widzę bo trochę kodu jest, za to ty masz poważne możliwości żeby do tego dojść - i podpowiadam ci teraz BARDZO WAŻNĄ RZECZ, uwierz mi - bardziej się przydaje podpowiedź jak szukać błędów, jak sobie z tym radzić, jakie metody stosować niż - pokazać że problem leży w TEJ LINII KODU

skoro piszesz że NAGLE ci nie działa - to co ja zrobiłbym na twoim miejscu. Posłuchaj spokojnie i spróbuj wdrożyć to w życie to strasznie szybko dojdziesz co jest nie tak:

1. mógłbym pomyśleć, że przede wszystkim w ogóle nie działa procedura obsługi przerwania, bo przecież bez niej wyświetlacz będzie w 100% głuchy - chyba się tu zgodzisz ze mną???? Więc trza sprawdzić czy działa samo przerwanie. Jak ??? to proste - biorę w rękę swój ulubiony DBEUGER czyli pojedynczą diodę LED , podłączam ją do dowolnego pinu procka i pierwsza linia w przerwaniu to zapalenie diody LED (oczywiście w main ustawienie kierunku pinu uprzednio, na WYJŚCIOWY)...... Więc teraz co? jeśli dioda się zapali to znaczy że przerwanie działa - i możemy szukać dalej, ale jeśli się nie pali to już masz byka za rogi można powiedzieć. Bo to pewnie znaczy że albo coś namieszałeś niechcący w inicjalizacji timera albo nie włączyłeś sei() itp ... no sam rozumiesz - masz już jakiś KONKRETNY TROP - prawda ???? ok ale jeśli dioda się pali to pójdźmy dalej

2. a może mi się coś rozłączyło w kabelkach z wyświetlaczem ?????? hmmm sprawdzę to - więc w tymże przerwaniu zakomentuję wszystkie linie i zostawię tylko dwie, gdzie na port KATOD i ANOD wpiszę takie wartości żeby wszystkie wyświetlacze mi się zapaliły - muszą się zapalić. Jeśli się zapalą to będziemy szukać dalej ale jeśli nie to masz kolejnego byka za rogi. Ale jeśli świecą to jedziemy dalej panie kochany:

3. sprawdzamy zatem robierając multipleksowanie na dwa etapy - samą procedurę obsługi przerwania. Zakomentował bym więc wszystkie IF'y wyrzucające mi stany cyfr na segmenty i wpisał stałą wartość, po to aby sprawdzić czy działa samo wachlowanie wspólnymi Andodami czy tam Katodami. Bo mogłeś się np dziabnąć gdzieś w maskowaniu. Wtedy na wyświetlaczu powinny się pojawić takie same znaczki tzn ka każdej pozycji wyświetlacza. Jeśli się nie pokażą to przejdziemy dalej, ale jeśli się nie pokażą to znaczy że masz byka za rogi i sprawdzasz czy nie walnąłeś się w "wachlowaniu" wspólnymi anodami/katodami. Jeśli zaś to działa to:

4. masz problem w samych IF'ach

---------------------

czy widzisz całą tą i to dość prostą metodologię postępowania w takich przypadkach ?????


zamiast siedzieć i analizować wzrokiem setki razy cały kod we wszystkich PLIKACH - naucz się umiejętnie dzielić jego analizę na drobne części idąc od samego dołu - NIE MA MOCNYCH jak mówił PAWLAK w znanym serialu - MUSI wyjść ci wtedy gdzie leży babol. To że nie będziesz go może np mógł rozwiązać to już inna kwestia - ale wtedy masz temat na forum, bo wejdziesz i zamiast wrzucać cały przepastny swój KOD ŹRÓDŁOWY dopisując krótko - "ŻE NIE DZIAŁA"

wkleisz fragment, w którym sam już konkretnie doszedłeś że jest babol, opiszesz jak do tego doszedłeś, i co ci tu sprawia problem - wtedy udzielenie precyzyjnej odpowiedzi jest łatwe proste i przyjemne dla każdego kto zobaczy tak przygotowane pytanie na forum.

_________________
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: 14 sie 2012, o 21:38 
Offline
Moderator
Avatar użytkownika

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

Antystatyczny napisał(a):
I jeszcze jedno. Tablicę deklaruję jako unsigned int o objętości jednego rekordu = 1bajt.


Ja naprawdę nie mogę ciebie zrozumieć, w kodzie masz tablicę znaków zdefiniowaną jako uint8_t a ty piszesz tu z uporem godnym podziwu, że deklarujesz ją jako "unsigned int i to jeszcze o objętości 1 rekordu = bajtu". Toż w tym jednym stwierdzeniu jest TYLE błędów że masakra!. I ja już nie wiem, czy ty zrobiłeś w kodzie tak jak tu opisujesz czy tak jak pokazałeś wyżej listing. Panie kolego REKORD to REKORD i nie ma NIC WSPÓLNEGO Z BAJTEM! :( to po pierwsze a po drugie typ unsigned int ma wg ciebie rozmiar -1go bajtu ?????? nie no to ja wymiękam - przecież wystarczy sięgnąć do byle tabelki typów żeby zobaczyć że unsigned int to dwa bajty.

Antystatyczny napisał(a):
Dlaczego więc kompilator twierdzi, że coś kombinuję, skoro z góry ustalam, że najstarszy bit nie bedzie oznaczał "+/-"?

I ty się dziwisz, że kompilator coś twierdzi ????

Antystatyczny napisał(a):
To jest jakiś mini babolek twórców,

Posłuchaj - ja mam może taką wadę, że strasznie cięty jestem, gdy ktoś się uczy czegokolwiek i jak coś robi, i nie daj boże coś mu nie wychodzi i zaraz twierdzi albo przypuszcza że to wina/babol twórców czy to kompilatora czy to scalaka - to dostaję normalnie gęsiej skórki. A tobie zdarza się to nie po raz pierwszy. Powiedziałbym że co i rusz takie stwierdzenia rzucasz przy różnych okazjach. Dlatego mam do ciebie gorącą prośbę - powstrzymaj się z takimi stwierdzeniami przynajmniej na czas gdy ja staram się podpowiadać coś albo mnie pytasz. No chyba że wolisz żeby ja nie brał udziału w dyskusji to też to uszanuję i pójdę sobie do innych wątków.

Babolki twórców kompilatora zostaw sobie na czas gdy będziesz miał do perfekcji opanowane przynajmniej podstawy C - OK ????? proszę

Antystatyczny napisał(a):
czy raczej wynika to z jakichś innych ustaleń, które w innych sytuacjach są bardzo ważne?


Właśnie z tego to wynika - z tej domyślnej promocji do typu 16-bitowego.

Więc lepiej napisz że czegoś nie rozumiesz, że coś sprawia ci kłopot i jaki - itd - zamiast dopatrywać się winy wszędzie tylko nie we własnym kodzie. Tzn ja z jednej strony dobrze cię rozumiem bo mój start z C trwał aż 7 razy i porzucałem tą naukę będąc wściekłym że mi nic nie wychodzi ..... różnimy się jednak tym, że ja nawet będąc wściekłym - zdawałem sobie sprawę - że to moja wina - że nie mogę czegoś zrozumieć i dlatego nie wychodzi - a nigdy nie szukam przyczyn w babolach tych rzeczy, których jeszcze nie poznałem.....

------------------------ [ Dodano po: 3 minutach ]

Antystatyczny napisał(a):
Ok, dzięki. Podepnę jakś diodę i wrzucę w obsługe przerwania. Nie jestem pewien, czy dobrze pomaskowałem nieużywane piny w obsłudze przerwania. Dla sprawdzenia sprzętu wgrałem stary soft i zegarek działa, czyli sprzęt jako taki mam sprawny. Mirku, bardzo Cie prosze, bys zerknął jedynie na linię kodu w obsłudze przerwania, która ostatecznie włącza anody. Chciałem w tej linii zwiększyć uniwersalność biblioteki przez zastąpienie suchej wartości liczbowej operacjami z makrami w roli głównej. Nie do końca wiem, czy ja dobrze skonstruowałem.


Ja chciałem Cię przy okazji nauczyć dzielenia problemu na mniejsze kawałki ale ty wolisz tego uniknąć ;) jak chcesz

wg mnie masz babola w tej linii

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

_________________
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: 14 sie 2012, o 22:08 
Offline
Moderator
Avatar użytkownika

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

No to jak się zrozumieliśmy to pewnie już nie będziemy się nawzajem irytować dalej - a ja i tak nadal chętnie będę pomagał...

Tylko widzisz tą lekcję z diodą jako DEBUGER powinieneś sobie dobrze zapamiętać - bo wbrew pozorom - nauka programowania to wcale nie tylko poznawanie języka - ale przede wszystkim umiejętność także szukania błędów i strukturalnego - także algorytmicznego myślenia.....

Dlatego ja tak duży nacisk na to kładę - i wiem, że jak ktoś się nauczy takiego podejścia, szczególnie w szukaniu błędów to potem nigdy nie żałuje, chociaż nieraz tak trudno przekonać do tego niektóre osoby ;) ..... więc stosuj te kroki a zobaczysz sam jak szybko ci to zaprocentuje.

napisałeś:
Cytuj:
Dla Was, "oblatanych" programistów masa spraw jest oczywista...

I tu mnie krzywdzisz troszkę - bo ja właśnie staram się pokazać jak na początku gdy się nie jest oblatanym można sobie właśnie lepiej radzić - tylko skorzystaj z tego, sprawdź, dotknij - a potem mów że dla mnie to jest wszystko oczywiste i łatwo mi mówić.

Ja dokładnie gdy 2006 roku zaczynałem ponownie zabawę z mikrokontrolerami to też minęło prawie 20 lat !!!! no może 15! ... i też miałem DOKŁADNIE TAK JAK TY TERAZ - hmmmm nawet gorzej, bo nie miałem książki, nie miałem takiego forum ... no może na elektrodzie wtedy było więcej fajnych ludzi i dało się też wtedy częściej dowiedzieć czegoś jako początkujący bo teraz to tam gonią takich do googla ..... a ja tu się staram, dwoję i troję żeby na naszym forum było inaczej. Zresztą żeby tylko ja .... Ilu już ludzi tu się zaangażowało w taką fajną pomoc początkującym ....

Nie martw się że ci nie wychodzi wieloplikowy projekt bo to początki, więc trzeba przejść tą drogę, ale już przecież masz ten projekt w tych plikach praktycznie ładnie napisany - jak widzisz jest pewnie TYLKO JEDEN mały problem - którego trzeba umieć wyszukać. Pomyśl sobie - wystarczy że miałbyś skopane sterowanie wspólnymi anodami/katodami (bo np źle maskujesz) i już będzie efekt że nic nie ma na wyświetlaczu...... ale że nie masz wyrobionych jeszcze takich kroków - JAK SOBIE RADZIĆ, jak sprawdzać, jak dzielić na mniejsze kroki - to dlatego wydaje ci się że tego nie ograniasz ....

jeszcze raz mówię - ten test w tych punktach bardzo by ci się przydał..... Jak mnie coś nagle nie działa w dużym projekcie - przecież też tak często miewam - to nie myślę sobie że pewnie wszystko mam dobrze - tylko lecę i sprawdzam po kolei od podstaw - i TO ZAWSZE DZIAŁA - tzn ZAWSZE DOJDZIE SIĘ DOŚĆ szybko gdzie leży babol - rozumiesz ????

Problem w tablicy rozwiąż np tak:

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


czyli zobacz to też dla oka inna alternatywna metoda tworzenia generatora znaków - bo tam np gdzie jedynki (w zależności od wyświetlacza i jego sterowania) to zapalone segmenty danej cyfry, albo ew tam gdzie zera

.... a jawne rzutowanie wcale nie należy jak napisałeś do niemile widzianych praktyk - wręcz odwrotnie, do bardziej zaawansowanych praktyk o ile mądrze się go używa. A w tym wypadku wcale nie jest głupie - takie jawne rzutowanie

no i zapamiętaj też że

unsigned int - to typ 16-bitowy, liczba z zakresu 0 - 65535 (bez znaku)

a nie typ jedno bajtowy 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  
PostNapisane: 14 sie 2012, o 22:21 
Offline
Moderator
Avatar użytkownika

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

No więc bardzo ciekaw jestem czy w tym debugowaniu 1-diodowym dojdziesz właśnie też do tej jednej linijki, która ma u ciebie zapalać już wybrany wyświetlacz ;) - bo jak mówię tam wg mnie jak na razie - leży błąd.

_________________
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: 15 sie 2012, o 08:44 
Offline
Moderator
Avatar użytkownika

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

No widzisz i sam przyznaj czy nie lepiej było to sprawdzać tak jak pisałem ? Po drodze dzięki temu wyłapałeś (z tego co opisujesz jeszcze kilka innych rzeczy) ;)

Kod:
PORT(A_PORT) = (PORT(A_PORT) & ~(CYFRA1|CYFRA2|CYFRA3|CYFRA4))|(~cnt & 0x0f);


a teraz wiesz o co chodzi z tym maskowaniem ? (bo jak widzisz pisałem o tym wyżej, że masz tu błąd) ;)

Bo nie dość, że ustawiałeś za każdym razem JEDYNKI na pinach CYFRA1..4 to jeszcze co robiłeś ? To jeszcze ustawiałeś na siłę ZERA na pozostałych pinach tego PORTU .... co także byłoby poważnym błędem gdybyś tam miał np podłączone inne peryferia, sterowane z innej części programu.


Autor postu otrzymał pochwałę

_________________
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: 14 ] 

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:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO