Teraz jest 18 maja 2012, o 07:09

Strefa czasowa: UTC + 1




Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 7 ] 
Autor Wiadomość
PostNapisane: 21 lut 2012, o 22:04 
Offline

Dołączył(a): 18 lut 2012, o 14:23
Posty: 28
Witam,
Znalazłem, że kropka to segment H, to też ją dodałem do mojej tablicy jako 11 z kolei, tylko kiedy ją dopiszę do cyfry nr 2 jako: "cy2=d2|11" albo jak dodam ją tak: "cy2=d2|SEG_DP" to na cy2 dzieje się wszystko tylko nie to czego chcę.
Domyślam się, że kompilator po prostu dodaje sobie SEG_DP do zmiennej d2 co w wyniku daje liczbę > 9 czyli nie możliwą do wyświetlenie ale nie wiem gdzie dopisać tą kropkę aby zniwelować ten błąd.
Proszę o pomoc.


Góra
 Zobacz profil  
 
PostNapisane: 21 lut 2012, o 22:31 
Offline
Avatar użytkownika

Dołączył(a): 4 paź 2011, o 13:07
Posty: 1203
Lokalizacja: opole
jaśniej może napisz , przedstaw kod , bo ciężko zgadnąć o co ci chodzi

_________________
Subaru Libero E12i 4WD SDX-SR 94
http://www.sunduino.neth.pl
ObrazekObrazekObrazek


Góra
 Zobacz profil  
 
PostNapisane: 21 lut 2012, o 22:43 
Offline

Dołączył(a): 18 lut 2012, o 14:23
Posty: 28
chodzi mi o to, że jak mam do możliwości wyświetlenia na wyświetlaczu LED 4 cyfry z kropkami, to 4 cyfry jestem w stanie wyświetlić jednak kiedy do jakiejkolwiek cyfry dodać kropkę to na wyświetlaczu na tej cyfrze zaczynają się pojawiać dziwne rzeczy a nie cyfra + kropka pod nią. Kod do okiełzania multipleksu LED jest napisany na podstawie kodu z płyty DVD (jest praktycznie taki sam) tylko w tablicy z zapisanymi cyframi dodałem swoją kropkę i mam problem z dodaniem jej do main.c ponieważ nie wiem gdzie ją wpleść do mojej pętli głównej.


Góra
 Zobacz profil  
 
PostNapisane: 21 lut 2012, o 23:36 
Offline
Avatar użytkownika

Dołączył(a): 15 gru 2011, o 00:50
Posty: 107
Lokalizacja: Dolnyśląsk
Bardzo prosta rzecz kolego :) ale jak wspominał SunRiver. Podaj jakiś kod to Cię spróbujemy nakierować bo gotowców to raczej nikt nie daje i nie powinien tego robić.


Góra
 Zobacz profil  
 
PostNapisane: 22 lut 2012, o 00:44 
Offline
Avatar użytkownika

Dołączył(a): 3 paź 2011, o 22:27
Posty: 1357
Lokalizacja: Szczecin
Ale spokojnie - ja może powiem troszkę inaczej bo coś przez skórę czuję chyba problem kolegi - aczkolwiek może się mylę.

Po pierwsze faktem jest że w książce w ogóle nie poruszyłem zagadnienia jak wyświetlać sobie kropki - ale nie samą kropkę tylko np kropkę po jakiejś cyfrze.....

Ty widzę, że poszedłeś bardzo złą drogą, bo jak piszesz zdefiniowałeś sobie znak kropkę jako kolejny znak w tablicy znaków na LED - dobrze myślę ? No gdy wpiszesz jej kod czyli INDEX do zmiennej cy1, czy cy2 - to sama kropka pewnie się świeci ? dobrze zgaduję ?

No ale następnie podjąłeś się karkołomnej operacji:

cy2=d2|SEG_DP;

O jej! co ty robisz ? weź sobie oblicz jaka liczba wyląduje w zmiennej cy2 po tej operacji: d2|SEG_DP ..... toż to będzie jakiś indeks w tej tablicy, który nie odpowiada żadnemu elementowi w niej (tu widać, że jeszcze nie do końca zrozumiałeś na czym polega do końca to wyświetlanie pojedynczych znaków - tzn jak one są pobierane z tej tablicy wzorców - zgadza się?)

dlatego podpowiem, że obsługę kropek można sobie zrobić ale np poprzez lekką modyfikację funkcji z przerwaniu i opcji OR z SEG_DP użyć w jakimś dodatkowym warunku gdy wywalany jest wzór o kodzie w cy2 na LED.... to na tym etapie w zależności tak na przykład od jakiejś dodatkowej zmiennej czy zmiennych np k1, k2, k3, k4 .... dokonywać np coś takiego:


Składnia: [ Pobierz ] [ Ukryj ]
język c
  1.    if(licznik==1)               (k1) ? pgm_read_byte( &cyfry[cy1] ) | SEG_DP : pgm_read_byte( &cyfry[cy1] ) ;          
  2.    else if(licznik==2) LED_DATA = (k2) ? pgm_read_byte( &cyfry[cy2] ) | SEG_DP : pgm_read_byte( &cyfry[cy2] ) ;
  3.    else if(licznik==4) LED_DATA = (k3) ? pgm_read_byte( &cyfry[cy3] ) | SEG_DP : pgm_read_byte( &cyfry[cy3] ) ;
  4.    else if(licznik==8) LED_DATA = (k4) ? pgm_read_byte( &cyfry[cy4] ) | SEG_DP : pgm_read_byte( &cyfry[cy4] ) ;


wtedy oprócz zmiennych cy1, cy2, cy3, cy4 definiujesz sobie jeszcze dodatkowo k1, k2, k3, k4

i jak chcesz na stałe wyświetlić kropkę na drugim wyświetlaczu to

k2=1;
cy1=1; cy2=2; cy3=0; cy4=5

uzyskasz wtedy liczbę 12.05

albo:

k2=0;
k3=1;
cy1=8; cy2=3; cy3=7; cy4=2

uzyskasz liczbę 837.2

oczywiście jak widzisz musiałem zgasić kropkę na pozycji 2 ....

troszkę to tak na kolanie napisałem więc może nie zadziałać od pierwszego kopa - ale taką drogą można pójść ;)

i doczytaj jeszcze raz po co jest to:

pgm_read_byte( &cyfry[cyn] );

_________________
zapraszam także na mój blog: http://www.mirekk36.blogspot.com


Góra
 Zobacz profil  
 
PostNapisane: 22 lut 2012, o 19:45 
Offline

Dołączył(a): 18 lut 2012, o 14:23
Posty: 28
mirekk36 napisał(a):
Ale spokojnie - ja może powiem troszkę inaczej bo coś przez skórę czuję chyba problem kolegi - aczkolwiek może się mylę.


Masz rację nie mylisz się i dzięki, że powtórzyłeś to co już napisałem:

infa08 napisał(a):
kiedy ją dopiszę do cyfry nr 2 jako: "cy2=d2|11" albo jak dodam ją tak: "cy2=d2|SEG_DP" to na cy2 dzieje się wszystko tylko nie to czego chcę.
Domyślam się, że kompilator po prostu dodaje sobie SEG_DP do zmiennej d2 co w wyniku daje liczbę > 9 czyli nie możliwą do wyświetlenie


mirekk36 napisał(a):
dlatego podpowiem, że obsługę kropek można sobie zrobić ale np poprzez lekką modyfikację funkcji z przerwaniu i opcji OR z SEG_DP użyć w jakimś dodatkowym warunku gdy wywalany jest wzór o kodzie w cy2 na LED.... to na tym etapie w zależności tak na przykład od jakiejś dodatkowej zmiennej czy zmiennych np k1, k2, k3, k4 .... dokonywać np coś takiego:


Składnia: [ Pobierz ] [ Ukryj ]
język c
  1.    if(licznik==1)               (k1) ? pgm_read_byte( &cyfry[cy1] ) | SEG_DP : pgm_read_byte( &cyfry[cy1] ) ;          
  2.    else if(licznik==2) LED_DATA = (k2) ? pgm_read_byte( &cyfry[cy2] ) | SEG_DP : pgm_read_byte( &cyfry[cy2] ) ;
  3.    else if(licznik==4) LED_DATA = (k3) ? pgm_read_byte( &cyfry[cy3] ) | SEG_DP : pgm_read_byte( &cyfry[cy3] ) ;
  4.    else if(licznik==8) LED_DATA = (k4) ? pgm_read_byte( &cyfry[cy4] ) | SEG_DP : pgm_read_byte( &cyfry[cy4] ) ;


wtedy oprócz zmiennych cy1, cy2, cy3, cy4 definiujesz sobie jeszcze dodatkowo k1, k2, k3, k4


Dodałem zmienne k1, k2, k3, k4 do pliku d_led.h i przepisałem twój kod. Wgrałem do mikrokontrolera i diody przestały działać (pojawił się wszędzie INDEX "NIC") toteż zmodyfikowałem go troszeczkę:

Składnia: [ Pobierz ] [ Ukryj ]
język c
  1.         if(licznik==1)
  2.                 {
  3.                         LED_DATA = pgm_read_byte( &cyfry[cy1] ) ;       // gdy zapalony wyśw.1 podaj stan zmiennej c1
  4.                         if(k1=1) pgm_read_byte( &cyfry[cy1] ) | SEG_DP;
  5.                 }
  6.         if(licznik==2)
  7.                 {
  8.                         LED_DATA = pgm_read_byte( &cyfry[cy2] ) ;       // gdy zapalony wyśw.2 podaj stan zmiennej c2
  9.                         if(k2=1) pgm_read_byte( &cyfry[cy2] ) | SEG_DP;
  10.                 }
  11.         if(licznik==4)
  12.                 {
  13.                         LED_DATA = pgm_read_byte( &cyfry[cy3] ) ;       // gdy zapalony wyśw.3 podaj stan zmiennej c3
  14.                         if(k3=1) pgm_read_byte( &cyfry[cy3] ) | SEG_DP;
  15.                 }
  16.         if(licznik==8)
  17.                 {
  18.                         LED_DATA = pgm_read_byte( &cyfry[cy4] ) ;       // gdy zapalony wyśw.4 podaj stan zmiennej c4
  19.                         if(k4=1) pgm_read_byte( &cyfry[cy4] ) | SEG_DP;
  20.                 }


I efekt był taki sam jak za pierwszym podejściem. Testowałem też dodawanie i usuwanie SEG_DP z tablicy znaków jednak nie przyniosło to żadnego rezultatu.


Ostatnio edytowano 25 lut 2012, o 18:53 przez infa08, łącznie edytowano 1 raz

Góra
 Zobacz profil  
 
PostNapisane: 22 lut 2012, o 20:53 
Offline
Avatar użytkownika

Dołączył(a): 22 gru 2011, o 22:18
Posty: 42
Z racji swojego braku doświadczenia, w pierwszym odruchu pomyślałem, że najprostszym rozwiązaniem będzie utworzenie drugiej tablicy z cyframi i kropką, czyli następna tablica 10 elementowa, a w zasadzie 11 elementowa prawda?
Jest to oczywiście wersja "rozrzutna", bo niestety tracimy znowu cenne miejsce w pamięci naszego procka.

_________________
Sprzętu kupa, a programista du..... żo ma jeszcze do nauki :)


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

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 0 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
Powered by phpBB® Forum Software © phpBB Group
Przyjazne użytkownikom polskie wsparcie phpBB3 - phpBB3.PL
phpBB SEO