logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Jak narysować wskazówki zegara w Bascom na AT89C52 bez polecenia line?

macek 12 Cze 2005 23:23 1724 12
REKLAMA
  • #1 1572961
    macek
    Poziom 24  
    Posty: 913
    Pomógł: 40
    Ocena: 19
    Witam mam zrobic projekt zegarka analogowego na at89c52. Wymyslilem sobie to tak zeby wyswietlac wskazowki chcialbym uzywac polecenia line. Rysuje linie od p (x0,y0) do (x1,y1) Tak napisali w polskim helpie Napisali tez ze dziala w wersjach >= niz 1.costam. Ja mam wersje kompilatora 2.0.11.0. I dostaje unknown statement. Czyli wyglada na to ze nie ma takiej komendy. Ma ktos pomysl jak wyswietlac te pieprzone wskazowki. Pozdrawiam i prosze o szybkie odpowiedzi bo sesja tuz tuz :)
  • REKLAMA
  • #2 1573013
    LordBlick
    VIP Zasłużony dla elektroda
    Posty: 5438
    Pomógł: 549
    Ocena: 69
    Co to, koncert życzeń ? ;) Twoja sesja to twój problem, czemu tak nieuprzejmie nas poganiasz ? Słowo "proszę" zbytnio tego nie równoważy... A kod/schemat pokażesz do analizy, czy mamy się go domyśleć ? no i gdzie leży ten help, w którym takie rewelacje ? line się nie doszukałem w polskim helpie 2.11(by Zbigniew Gibek)... Może twój kompilator to wersja odchudzona ?
  • #3 1573075
    macek
    Poziom 24  
    Posty: 913
    Pomógł: 40
    Ocena: 19
    Wydawalo mi sie ze zadaje konkretne pytanie o to dlaczego kompiler nie rozpoznaje mi polecenia i co zrobic zeby je rozpoznal. Lub jakiego innego uzyc. Wydalo mi sie niepotrzebne umieszczanie kodu ktory jest przekopiowany z helpa. Kurcze nie znam sie na tym na codzien zajmuje sie czym innym jak pisze cos glupiego to prosze o wyrozumialosc.
    A co do " co kogo obchodzi" to wydawalo mi sie ze na naszym forum sa ludzie z poczuciem humoru szczegolnie w niedziele. Chociaz Light'I nie dziwie Ci sie sam nieraz mam ochote wszystkich pobic jak czytam setnny raz jakies glupie pytanie jak naprawic bo niedziala. Pozdrawiam


    $crystal = 12000000
    Config Graphlcd = 240 * 64 , Port = P1 , Ce = P3.5 , Cd = P3.4 , Cols = 30
    Config Timer0 = Timer , Gate = Internal , Mode = 0
    Dim X As Byte , Y As Byte
    Cls
    Cursor Off
    Line(0 , 0) -(64 , 27) ,255



    Cos wymyslilem

    Dim X As Byte , Y As Byte

    For X = 0 To 10
    Y = X + 5
    Pset X, y, 1
    Next

    Mozna kreslic proste za pomoca funkcji liniowej. Zastanawiam sie teraz jak zrobic zeby moja funkcja obracala sie wokul jednego punktu co 6 stopni :)



    Chyba jednak jestem boski wymyslilem wiec pisze dla potomnych. y=ax+b

    a=tan(alfa) czyli tangens konta

    No to teraz mam juz tylko problem z tym ze niby bascom powinien liczyc tangens funkcji a moja wersja tez nie ma tej funkcji czy to przez to ze to demko ???
  • REKLAMA
  • #4 1573342
    McRancor
    VIP Zasłużony dla elektroda
    Posty: 5326
    Pomógł: 479
    Ocena: 124
    Zrób tablice z wartością końcową dla 60 wartości, będzie szybciej niż liczyć na piechotę! Bascom powinien liczyć tangens funkcji, ale przecież to mały AVRek, a wartości jest tylko 60
  • #5 1573468
    crazy_phisic
    VIP Zasłużony dla elektroda
    Posty: 2244
    Pomógł: 278
    Ocena: 131
    Tan(alfa)= Sin(alfa)/Cos(alfa).... pytanie tylko ile zostanie ci po tych operacjach pamieci w procku hehhe wiec patrz post McRancor'a

    Pozdrawiam
  • REKLAMA
  • #6 1575366
    macek
    Poziom 24  
    Posty: 913
    Pomógł: 40
    Ocena: 19
    Nie moge sobie poradzic. Ani nie mam polecenia tan ani line czy moze to byc przez to ze wer demo jest jakas okrojona nie mam bibliotek
  • #7 1575428
    LordBlick
    VIP Zasłużony dla elektroda
    Posty: 5438
    Pomógł: 549
    Ocena: 69
    Ale po co ci to ? Tak jak koledzy podpowiadają, w arkuszu kalkulacyjnym (np. od OpenOffice) generujesz 60 wartości kąta (czyli co 6° od 0° do 354°) i od niego tangensy. Potem tylko przepisujesz wyniki do "Data" i używasz "Lookup" do pobrania odpowiednich wartości.
  • #8 1575624
    crazy_phisic
    VIP Zasłużony dla elektroda
    Posty: 2244
    Pomógł: 278
    Ocena: 131
    Light'I napisał:
    Ale po co ci to ? Tak jak koledzy podpowiadają, w arkuszu kalkulacyjnym (np. od OpenOffice) generujesz 60 wartości kąta (czyli co 6° od 0° do 354°) i od niego tangensy. Potem tylko przepisujesz wyniki do "Data" i używasz "Lookup" do pobrania odpowiednich wartości.


    To chyba jedyne rozwiązanie, bo Bascom 8051 nie ma zadnych funkji wspomagajacych zabawę z graficznym LCD (nie ma Line, oraz funkcji trygonometrycznych)...
    Innym wyjściem jest zamiana procesora na AVR wtedy masz w Bascomie caaaała palete funkcji graficznych ...

    Pozdrawiam
  • #9 1576003
    macek
    Poziom 24  
    Posty: 913
    Pomógł: 40
    Ocena: 19
    No i dupa. Zmiana na avr nie wchodzi w gre bo mam zrbic na tym. Jak robie petelke do rysowania to raz mi narysuje bardzo gesto punkty a jak kat wskazowka jest prawie pionowo to jest rzadko i szezej. raz wskazowka ma dlugosc 5 mm a raz 30. Z funkcja chyba nie wyjdzie. Nie mam pojecia jak to teraz ugrysc. Znowu zrobienie 60 obrazkow. To i duzo pamieci no i czasu. Moze ktos ma jakis pomysl co z tym fantem
  • REKLAMA
  • #10 1576025
    LordBlick
    VIP Zasłużony dla elektroda
    Posty: 5438
    Pomógł: 549
    Ocena: 69
    Twierdzenia Pitagorasa - suma kwadratów przyprostokątnej jest równa kwadratowi przeciwprostokatnej, która jest zawsze stała i sobie tak biega dookoła... Podziel sobie całość na odcinki, w których albo x, albo y są gęściejsze - bliżej do pionu - używasz zagęszczenia y, do poziomu - x. Ilość iteracji pętli to właśnie to zagęszczenie. Łapiesz ? ;) I najlepiej wynik tych przemysleń też wrzucić do "Data", po co procek ma się niepotrzebnie pocić, licząc w kółko to samo...
  • #11 1577750
    macek
    Poziom 24  
    Posty: 913
    Pomógł: 40
    Ocena: 19
    No i mam nastepny problem data nie moze byc zmiennoprzecinkowa bo mi wyrzuca - nan w symulacji. albo 0.0
  • #12 1577897
    LordBlick
    VIP Zasłużony dla elektroda
    Posty: 5438
    Pomógł: 549
    Ocena: 69
    To sobie zapisuj w postaci całkowitej i pamiętaj ile miejsc po przecinku dla wszyskich liczb jest przesunięcie, a resztę zaokrąglij.
  • #13 1577924
    McRancor
    VIP Zasłużony dla elektroda
    Posty: 5326
    Pomógł: 479
    Ocena: 124
    Zrób taką tablice:
    1,wartX,wartY
    2,wartX,wartY

    Robisz odwołanie do DataX i DataY gdzie w DataX masz w postaci Data, dane dla pixeli mw. tak

    DataX:
    Data 1,2,3,5,6,...
    DataY
    Data 12,13,14,99,...

    Odwołujesz się po indeksach
    X = Lookup( kat, DataX)
    Y = Lookup( kat, DataY)

    SKĄD CI SIĘ ZMIENNE PRZECINKI WZIĘŁY???!!!

    Jeszcze nie widziałem wyświetlacza z zmiennoprzecinkowymi pixelami, przecież nie wyświetlisz lini o długości 3,5 pixela!

Podsumowanie tematu

LABEL_AI_GENERATED
Dyskusja dotyczy problemu rysowania wskazówek zegara analogowego na mikrokontrolerze AT89C52 w języku Bascom 8051, gdzie użytkownik nie może użyć polecenia Line, które według polskiej dokumentacji powinno być dostępne w wersjach kompilatora od 1.x wzwyż. Wersja kompilatora 2.0.11.0 zgłasza błąd "unknown statement" dla polecenia Line, co sugeruje brak tej funkcji lub użycie wersji demo bez pełnych bibliotek. Uczestnicy forum wskazują, że Bascom 8051 nie posiada wbudowanych funkcji graficznych ani trygonometrycznych (np. Line, Tan), co utrudnia dynamiczne rysowanie linii wskazówek. Proponowane rozwiązania to: przygotowanie tablic z preobliczonymi wartościami współrzędnych dla 60 pozycji wskazówek (co 6 stopni), wykorzystanie funkcji Lookup do pobierania danych z tablic, oraz unikanie zmiennoprzecinkowych wartości na rzecz liczb całkowitych z przesunięciem dziesiętnym. Alternatywnie sugerowano zmianę mikrokontrolera na AVR, gdzie Bascom oferuje pełniejszy zestaw funkcji graficznych, jednak ze względu na wymóg projektu pozostano przy AT89C52. Wskazano także na konieczność optymalizacji pętli rysujących linie, uwzględniając różne zagęszczenia punktów w zależności od kąta wskazówki, oraz na wykorzystanie twierdzenia Pitagorasa do obliczeń długości i współrzędnych. Problemy z symulacją i błędami typu NaN wynikają z użycia zmiennoprzecinkowych danych, które należy zastąpić wartościami całkowitymi.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA