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

Bascom/M168/animacja.$hwstack/$swstack/$framesize

arktik1 16 Lip 2010 11:56 3316 29
  • #1 8298040
    arktik1
    Poziom 27  
    Witam.
    Zrobiłem taką animację do M168,jest z tym problem.
    
    $regfile = "M168def.dat"                                      ' use the Mega168
    $crystal = 2000000
    Config Portc = Input
            Portc = &B0000000
    Config Portd = &B11110000
            Portd = &B00001100
    $sim
    Config Lcd = 20 * 4
    Config Lcdpin = Pin , Db4 = Portb.2 , Db5 = Portb.3 , Db6 = Portb.4 , Db7 = Portb.5 , E = Portb.1 , Rs = Portb.0
    Cls
    Cursor Off
    
    Dim Q As Word , A As Byte , Q1 As Word , Q2 As Word , A1 As Word
    Dim X As Word , X1 As Long , Q3 As Word , P2 As Word
    A1 = 1 : Q1 = 2 : Q2 = 4 : X = 0 : X1 = 0
    
    
    
    
    Cls
    
    Goto Hold
    
    Hold:
    Dim P As Word , P1 As Word
    P = 0 : P1 = 0 : A1 = 1 : Q1 = 2 : Q2 = 4 : X = 3 : X1 = 0
    Dim P3 As Word , P4 As Word
    P4 = 0
    
    
    Cls
    
    Q = 0
    Q1 = 0
    
    
    Do
    
    Incr Q1
    If Q1 = 11 Then Q1 = 0
    If Q1 = 10 Then Incr Q
    If Q = 4 Then Q = 0
    If Q = 0 And P3 = 0 Then Gosub Def7
    If Q = 1 And P2 = 0 Then Gosub Def8
    If Q = 2 And P1 = 0 Then Gosub Def9
    If Q = 3 And P4 = 0 Then Gosub Def10
    
     Locate 2 , 6
     Lcd Chr(5) ; Chr(0) ; Chr(2) ; Spc(3) ; Chr(5) ; Chr(0) ; Chr(2)
     Locate 3 , 6
     Lcd Chr(4) ; Chr(1) ; Chr(3) ; Spc(3) ; Chr(4) ; Chr(1) ; Chr(3)
     Locate 1 , 6
     Lcd "___" ; Chr(7) ; Spc(1) ; Chr(6) ; "___"
    
    
    
    
    Loop
    
    'prosto oczy
    Def7:
    Deflcdchar 0 , 32 , 31 , 31 , 17 , 32 , 32 , 14 , 31        ' galka
    Deflcdchar 1 , 31 , 14 , 32 , 32 , 17 , 31 , 31 , 32        'galka dol
    Deflcdchar 2 , 32 , 16 , 28 , 30 , 15 , 7 , 3 , 3           'prawa
    Deflcdchar 3 , 3 , 3 , 7 , 15 , 30 , 28 , 16 , 32           'prawa dol
    Deflcdchar 4 , 24 , 24 , 28 , 14 , 15 , 7 , 1 , 32          ' lewa dol
    Deflcdchar 5 , 32 , 1 , 7 , 15 , 30 , 28 , 24 , 24          'lewa
    Deflcdchar 6 , 32 , 32 , 32 , 32 , 32 , 32 , 7 , 12         'brew prawa
    Deflcdchar 7 , 32 , 32 , 32 , 32 , 32 , 32 , 28 , 6         'brew lewa
    P3 = 1
    P2 = 0
    P1 = 0
    P4 = 0
    Return
    'oczy w lewo
    Def8:
    Deflcdchar 0 , 32 , 31 , 31 , 17 , 32 , 32 , 24 , 28        ' galka w lewo
    Deflcdchar 1 , 28 , 24 , 32 , 32 , 17 , 31 , 31 , 32        'galka lewo dol
    Deflcdchar 2 , 32 , 16 , 28 , 30 , 15 , 7 , 3 , 3           'prawa
    Deflcdchar 3 , 3 , 3 , 7 , 15 , 30 , 28 , 16 , 32           'prawa dol
    Deflcdchar 4 , 27 , 25 , 28 , 14 , 15 , 7 , 1 , 32          'lewy dol
    Deflcdchar 5 , 32 , 1 , 7 , 15 , 30 , 28 , 25 , 27          'lewa
    P3 = 0
    P2 = 1
    P1 = 0
    P4 = 0
    Return
    'oczy prawy dol
    Def9:
    
    Deflcdchar 0 , 32 , 31 , 31 , 17 , 32 , 32 , 32 , 1         ' galka w prawo
    Deflcdchar 1 , 3 , 3 , 1 , 32 , 17 , 31 , 31 , 32           ' galka w prawo dol
    Deflcdchar 2 , 32 , 16 , 28 , 30 , 15 , 7 , 3 , 19          'prawy
    Deflcdchar 3 , 27 , 27 , 23 , 15 , 30 , 28 , 16 , 32        'prawy dol
    Deflcdchar 4 , 24 , 24 , 28 , 14 , 15 , 7 , 1 , 32          ' lewa dol
    Deflcdchar 5 , 32 , 1 , 7 , 15 , 30 , 28 , 24 , 24          'lewa
    P1 = 1
    P2 = 0
    P3 = 0
    P4 = 0
    Return
    'zle oczy
    Def10:
    Deflcdchar 0 , 32 , 32 , 32 , 32 , 31 , 31 , 14 , 31        ' replace ? with number (0-7)
    Deflcdchar 2 , 32 , 32 , 32 , 32 , 24 , 30 , 7 , 3          'prawa
    Deflcdchar 5 , 32 , 32 , 32 , 32 , 3 , 15 , 28 , 24         'lewa
    Deflcdchar 1 , 31 , 14 , 32 , 32 , 17 , 31 , 31 , 32        'galka dol
    Deflcdchar 3 , 3 , 3 , 7 , 15 , 30 , 28 , 16 , 32           'prawa dol
    Deflcdchar 4 , 24 , 24 , 28 , 14 , 15 , 7 , 1 , 32          ' lewa dol
    P4 = 1
    P1 = 0
    P2 = 0
    P3 = 0
    Return
    

    Gdy włącza się czasem Uc to nie zawsze jest to wyświetlane prawidłowo.
    Czasami elementy są rozrzucone po całym wyświetlaczu.
    Czy może to być spowodowane ilością DEF??
    Program w symulacji działa prawidłowo.
  • #2 8298387
    FastProject
    Poziom 28  
    Fajne oczyska ;). faktycznie w symulacji działa, ale w rzeczywistości wyświetlacz LCD nie jest tak szybki jak symulacja, w związku z czym może nie wyrabiać z tak szybkim wysyłaniem danych, spróbuj pomiędzy instrukcjami LCD dać jakieś małe opóźnienia rzędu kilka ms.
  • #3 8298563
    arktik1
    Poziom 27  
    Dodałem WAIT 1 i jes tak samo.
    Zastanawiam się czy ilość DEF.... ma tutaj znaczenie.
    Jest to tylko wycinek większego programu, taki "wygaszacz" gdy urządzenie nic nie robi.
    W całym programie jest 6xDEF po 8xDeflcdchar.
    Dodam że właściwy program działa dobrze, tylko z tym kawałkiem jest problem.
    Poza tym gdy chciałem dodać jeszcze jedną animację to po wprowadzeniu następnych DEF program w Uc robił coraz więcej błędów.
    Czy jest ograniczona ilość deklarowanych zmiennych np. dim a as byte... i Deflcdchar?
  • #4 8298599
    FastProject
    Poziom 28  
    Raczej nie ma takiego ograniczenia, kolejne definicje deflcdchar zastępują w pamięci poprzednie.

    Może masz zbyt małe stosy programowy i sprzętowy. Jeśli nie masz dodaj takie instrukcje:

    $hwstack = 128
    $swstack = 128
    $framesize = 128

    128B to przykłady. Gdzieś na forum jest dokładny opis tych instrukcji.
  • #5 8298888
    arktik1
    Poziom 27  
    No właśnie.
    W większości kodów to się stosuje, tylko nigdzie nie mogę znaleźć jak te instrukcje się oblicza i jak to się ma do danych Uc.
    Nawet w HELPie BASCOMa nie wiele jest o tym.
  • Pomocny post
    #6 8299558
    Wojtek75
    Poziom 24  
    arktik1 napisał:
    No właśnie.
    W większości kodów to się stosuje, tylko nigdzie nie mogę znaleźć jak te instrukcje się oblicza i jak to się ma do danych Uc.
    Nawet w HELPie BASCOMa nie wiele jest o tym.

    https://www.elektroda.pl/rtvforum/topic320029.html
  • #7 8300219
    arktik1
    Poziom 27  
    Przebadałem program według instrukcji i nic się nie zmieniło prócz framesize = 0, to możliwe?

    Dodano po 26 [minuty]:

    To chyba jakaś lipa.
    Jak określę w opcjach np :
    $hwstack = 40
    $swstack = 50
    $framesize = 20
    to po wyliczeniu nic się nie zmienia, mogę wpisywać dowolne wartości.

    Dodano po 3 [minuty]:

    Gdy wpisałem
    $hwstack = 1
    $swstack = 1
    $framesize = 1
    to po wciśnięciu ADVISE obliczył:
    $hwstack = 1
    $swstack = 1
    $framesize = 1
    Gdzie tu sens?
  • #8 8302757
    arktik1
    Poziom 27  
    To może tak.
    Lepiej tak:
    Bascom/M168/animacja.$hwstack/$swstack/$framesize
    Czy może tak:
    Bascom/M168/animacja.$hwstack/$swstack/$framesize
    Lepiej mniej liter ,czy więcej, może po równo?
    Może mi to ktoś wyjaśnić.
  • #9 8303826
    ZbeeGin
    Poziom 39  
    Rysunek pierwszy:
    F - Nie używasz FrameSpace - bo w programie nie ma żaden instrukcji, która by z niej korzystała.
    S - SoftStack też nie jest używany bo żadnych SUB ani FUNCTION nie masz.
    H - HWStack jest używany i maksymalnie rozrósł się do 12 bajtów, bo masz parę GOSUB i wewnętrzny kod też coś tam sobie skubnął. Nie ma też przerwań w programie zatem apetyt na HWStack nie rośnie.

    Drugi rysunek: Ta sama sytuacja.

    Pierwszy i podstawowy błąd: DEFLCDCHR to nie instrukcja tylko informacja dla procedury inicjującej LCD by dodatkowo przeładowała CGRAM. Zmiany CGRAM "w locie" lepiej wykonać z niskiego poziomu wykorzystując kody sterujące wyświetlacza i wewnętrzne procedury:

    W Helpie ZbeeGin napisał:
    Język BASCOM BASIC oferuje wiele instrukcji obsługujacych wyświetlacz LCD. Aby jednak mieć całkowitą kontrolę nad wyświetlaczem można stosować procedury w języku asembler. Poniżej znajduje się przykład:

    $asm
      Ldi _temp1, 5        'załadowanie kodu rozkazu do R24
      Rcall _Lcd_control   'prześlemy do LCD jako komendę
    
      Ldi _temp1, 65       'załadowanie do R24 kodu znaku (litera A)
      Rcall _Write_lcd     'prześlemy do LCD jako daną
    $end asm


    Uwaga! Nazwy _Lcd_control oraz _Write_lcd są adresami procedur w asemblerze, możliwych do wywołania z jezyka BASCOM BASIC. Aby były one dostępne należy w programie skonfigurować wyświetlacz lub użyć jakiejkolwiek instrukcji z nim związanej.

    Dalszych informacji na temat programowania wyświetlacza LCD na niskim poziomie należy szukać w dokumentacji jego producenta.
  • #10 8305914
    arktik1
    Poziom 27  
    No dobrze.
    Ale czy jest różnica między ilością F,S,H.
    czy jak będzie tak:
    Bascom/M168/animacja.$hwstack/$swstack/$framesize
    To też jest dobrze?
    I dlaczego Stack Analyser nie zmienia tych wartości?
    Jeśli w Chip wpiszę HW...=1, soft...=1, frame...=1 to po wciśnięciu ADVISE nic się nie zmienia.
    Chodzi o to, z kąd mam wiedzieć ile ma być tych F,S,H?
  • #12 8306054
    arktik1
    Poziom 27  
    Jest to tylko wycinek kodu.
    Cls
    Do
    ... kod
    Goto Hold--- w całym kodzie jest GOSUB
    ... kod
    loop
    end

    Hold:
  • #13 8357855
    arktik1
    Poziom 27  
    Jeszcze kilka pytań .
    Dlaczego jeśli ustawie CRYSTAL=8000000 to nie zdarza się złe wyświetlanie, a jeśli jest 2000000 to jest to bardzo często??
    Dlaczego po resecie pinem za każdym razem wyświetlacz odpala prawidłowo, a po resecie Watchdogiem 1 raz na 3 występują "krzaki"?
    I najważniejsze:
    Dlaczego ten sam program na M8 działa bez problemu a na M168 są problemy?
  • #14 8357982
    janbernat
    Poziom 38  
    2000000=2MHz- 6 kółek
    8000000=8MHz- 6 kółek
    I w programie też masz 2MHz
    A dopiero:
    20000000=20Mhz-7 kółek
    I spróbuj tego:
    $lib "Lcd4busy.lib"
    Const _lcdport = Portd
    Const _lcdddr = Ddrd
    Const _lcdin = Pind
    Const _lcd_e = 1
    Const _lcd_rw = 2
    Const _lcd_rs = 3
    Jest znacznie szybciej- tylko jeden pin z procesora więcej.
    Ślicznie chodzi:
    
    $regfile = "M168def.dat"                          ' use the Mega168
    $crystal = 8000000
    Config Portc = Input
            Portc = &B0000000
    Config Portd = &B11110000
            Portd = &B00001100
    '$sim
    Config Lcd = 20 * 4
    'Config Lcdpin = Pin , Db4 = Portb.2 , Db5 = Portb.3 , Db6 = Portb.4 , Db7 = Portb.5 , E = Portb.1 , Rs = Portb.0
    $lib "Lcd4busy.lib"
    Const _lcdport = Portd
    Const _lcdddr = Ddrd
    Const _lcdin = Pind
    Const _lcd_e = 1
    Const _lcd_rw = 2
    Const _lcd_rs = 3
    
    Cls
    Cursor Off
    
    Dim Q As Word , A As Byte , Q1 As Word , Q2 As Word , A1 As Word
    Dim X As Word , X1 As Long , Q3 As Word , P2 As Word
    A1 = 1 : Q1 = 2 : Q2 = 4 : X = 0 : X1 = 0
    
    
    
    Cls
    
    Goto Hold
    
    Hold:
     Dim P As Word , P1 As Word
    Dim P3 As Word , P4 As Word
    P = 0 : P1 = 0 : A1 = 1 : Q1 = 2 : Q2 = 4 : X = 3 : X1 = 0
    
    P4 = 0
    
    
    Cls
    
    Q = 0
    Q1 = 0
    
    
    Do
    
    Incr Q1
    If Q1 = 11 Then Q1 = 0
    If Q1 = 10 Then Incr Q
    If Q = 4 Then Q = 0
    If Q = 0 And P3 = 0 Then Gosub Def7
    If Q = 1 And P2 = 0 Then Gosub Def8
    If Q = 2 And P1 = 0 Then Gosub Def9
    If Q = 3 And P4 = 0 Then Gosub Def10
    
     Locate 2 , 6
     Lcd Chr(5) ; Chr(0) ; Chr(2) ; Spc(3) ; Chr(5) ; Chr(0) ; Chr(2)
     Locate 3 , 6
     Lcd Chr(4) ; Chr(1) ; Chr(3) ; Spc(3) ; Chr(4) ; Chr(1) ; Chr(3)
     Locate 1 , 6
     Lcd "___" ; Chr(7) ; Spc(1) ; Chr(6) ; "___"
    
    
    
    
    Loop
    
    'prosto oczy
    Def7:
    Deflcdchar 0 , 32 , 31 , 31 , 17 , 32 , 32 , 14 , 31       ' galka
    Deflcdchar 1 , 31 , 14 , 32 , 32 , 17 , 31 , 31 , 32       'galka dol
    Deflcdchar 2 , 32 , 16 , 28 , 30 , 15 , 7 , 3 , 3 'prawa
    Deflcdchar 3 , 3 , 3 , 7 , 15 , 30 , 28 , 16 , 32 'prawa dol
    Deflcdchar 4 , 24 , 24 , 28 , 14 , 15 , 7 , 1 , 32       ' lewa dol
    Deflcdchar 5 , 32 , 1 , 7 , 15 , 30 , 28 , 24 , 24       'lewa
    Deflcdchar 6 , 32 , 32 , 32 , 32 , 32 , 32 , 7 , 12       'brew prawa
    Deflcdchar 7 , 32 , 32 , 32 , 32 , 32 , 32 , 28 , 6       'brew lewa
    P3 = 1
    P2 = 0
    P1 = 0
    P4 = 0
    Waitms 500
    Return
    'oczy w lewo
    Def8:
    Deflcdchar 0 , 32 , 31 , 31 , 17 , 32 , 32 , 24 , 28       ' galka w lewo
    Deflcdchar 1 , 28 , 24 , 32 , 32 , 17 , 31 , 31 , 32       'galka lewo dol
    Deflcdchar 2 , 32 , 16 , 28 , 30 , 15 , 7 , 3 , 3 'prawa
    Deflcdchar 3 , 3 , 3 , 7 , 15 , 30 , 28 , 16 , 32 'prawa dol
    Deflcdchar 4 , 27 , 25 , 28 , 14 , 15 , 7 , 1 , 32       'lewy dol
    Deflcdchar 5 , 32 , 1 , 7 , 15 , 30 , 28 , 25 , 27       'lewa
    P3 = 0
    P2 = 1
    P1 = 0
    P4 = 0
    Waitms 500
    Return
    'oczy prawy dol
    Def9:
    
    Deflcdchar 0 , 32 , 31 , 31 , 17 , 32 , 32 , 32 , 1       ' galka w prawo
    Deflcdchar 1 , 3 , 3 , 1 , 32 , 17 , 31 , 31 , 32 ' galka w prawo dol
    Deflcdchar 2 , 32 , 16 , 28 , 30 , 15 , 7 , 3 , 19       'prawy
    Deflcdchar 3 , 27 , 27 , 23 , 15 , 30 , 28 , 16 , 32       'prawy dol
    Deflcdchar 4 , 24 , 24 , 28 , 14 , 15 , 7 , 1 , 32       ' lewa dol
    Deflcdchar 5 , 32 , 1 , 7 , 15 , 30 , 28 , 24 , 24       'lewa
    P1 = 1
    P2 = 0
    P3 = 0
    P4 = 0
    Waitms 500
    Return
    'zle oczy
    Def10:
    Deflcdchar 0 , 32 , 32 , 32 , 32 , 31 , 31 , 14 , 31       ' replace ? with number (0-7)
    Deflcdchar 2 , 32 , 32 , 32 , 32 , 24 , 30 , 7 , 3       'prawa
    Deflcdchar 5 , 32 , 32 , 32 , 32 , 3 , 15 , 28 , 24       'lewa
    Deflcdchar 1 , 31 , 14 , 32 , 32 , 17 , 31 , 31 , 32       'galka dol
    Deflcdchar 3 , 3 , 3 , 7 , 15 , 30 , 28 , 16 , 32 'prawa dol
    Deflcdchar 4 , 24 , 24 , 28 , 14 , 15 , 7 , 1 , 32       ' lewa dol
    P4 = 1
    P1 = 0
    P2 = 0
    P3 = 0
    Waitms 500
    Return
    

    Powinieneś to sprzedawać.
    P.S.
    Brew się nie opuszcza w "oczy złe"- tylko rzęsa.
    Oczy złe to powinna być opuszczona brew i rzęsa.
    Zrób jeszcze oczy zawstydzone i rozlatane- jak u kłamczucha.
  • #15 8358398
    arktik1
    Poziom 27  
    Wszystko pięknie ,tylko w całym UC jest wolne może 4 PINY.
    PORTB.7,8 i PORTC.4,5.
    Tak jak pisałem , to tylko wygaszacz większego programu.
    Tą dodatkową końcówkę da się "dorobić" z portu B?
    Rozumiem że 2000000=2MHz- 6 kółek .
    Tylko dlaczego zmiana częstotliwości powoduje różne działania wyświetlacza.?

    Dodano po 49 [sekundy]:

    a poza tym jeśli dołożę jakieś oczy to program coraz gorzej działa.
  • #16 8358518
    Wojtek75
    Poziom 24  
    arktik1 napisał:
    Rozumiem że 2000000=2MHz- 6 kółek .
    Tylko dlaczego zmiana częstotliwości powoduje różne działania wyświetlacza.?

    Ok. ale skąd dostarczasz te 2MHz mikrokontrolerowi. Z wewnętrznego oscylatora się nie da. Dołączasz rezonator, podajesz sygnał z zewnętrznego generatora?
  • #17 8358522
    arktik1
    Poziom 27  
    Czy można gdzieś zmienić standardowe opóźnienia wysyłania do wyświetlacza?

    Dodano po 1 [minuty]:

    Nie.
    Oscylator jest ustawiony na 8MHz.wew.
    W programie jest tylko $crystal = 2000000
  • #18 8358583
    Wojtek75
    Poziom 24  
    arktik1 napisał:
    Nie.
    Oscylator jest ustawiony na 8MHz.wew.
    W programie jest tylko $crystal = 2000000

    I według Ciebie to ma działać prawidłowo. Bez obrazy chłopie ale mnie ręce opadły. Innym którzy się tu udzielają zapewne też.
    Wartość która jest po $crystal musi odpowiadać fizycznej wartości którą popędzany jest uC. W przeciwnym razie spodziewaj się cudów (dosłownie).
  • #19 8358677
    janbernat
    Poziom 38  
    No to sprawdziłem.
    Bez biblioteki $lib "Lcd4busy.lib" wszystko się wykrzacza.
    Ze sprawdzaniem zajętości LCD wszystko chodzi pięknie.
    Nawet jak zmienię taktowanie na 2MHz.
    Jak masz wolne piny- to wykorzystaj do sprawdzania Rw.
    P.S.
    Wyłącz zewnętrzny kwarc- i masz wolne końcówki na porcie B.
    Albo wykorzystaj port D do LCD- zostaje jedna nóżka- a resztę na port B- i masz dwie końcówki na kwarc.
  • #20 8358759
    arktik1
    Poziom 27  
    No dobrze ale to chyba powinno być tak:
    
    $lib "Lcd4busy.lib"
    Const _lcdport = Portb
    Const _lcdddr = Ddrb
    Const _lcdin = Pinb
    Const _lcd_e = 1
    Const _lcd_rw = 2
    Const _lcd_rs = 3 
    

    ??

    Dodano po 4 [minuty]:

    No i:
    "Wartość która jest po $crystal musi odpowiadać fizycznej wartości którą popędzany jest uC. W przeciwnym razie spodziewaj się cudów (dosłownie)."
    Z kąt mogłem to wiedzieć?
    Przestawię jutro CRYSTAL i zobaczymy.
    Dziwne bo napisałem już kilkanaście programów i w żadnym te 2 wartości się nie zgadzają. Wszystkie natomiast działają prawidłowo.
  • Pomocny post
    #21 8360377
    janbernat
    Poziom 38  
    W Twoim wypadku jest to portb.
    A w moim portb jest zajęty to sprawdziłem na portd.
    Deklaracja $crystal jest do niczego nie potrzebna dopóki nie korzystasz z bibliotek czy podprogramów wykorzystujących zależności czasowe.
    A tych w Bascomie jest mnóstwo.
    UART, LCD, SPI itd.
    Tak że lepiej jest ustawiać $crystal taki jaki jest naprawdę.
  • #22 8360812
    arktik1
    Poziom 27  
    Po podłączeniu LCD4BUSY wydaje się działać troszkę lepiej.
    Zastanawia mnie tylko :
    Dlaczego na M8 działa bezproblemowo a na M168 nie?
    I dla czego jeśli Uc jest kasowany przez WATCHDOG to nie zawsze dobrze się uruchamia, jeśli natomiast skasuje resetem to odpala za każdym razem?
    Cały program do M168 zajmuje 71% przy kompilacji.
    Jeśli dołożę coś do kodu, nie ważne czy do wygaszacza, czy do głównego to:
    Przy zajętości np 89% Uc zawiesza się i trzeba go resetować.
    A może to wina kompilatora?
    Czym więcej DEF.... i zmiennych to program gorzej działa, mimo to że mieści się w pamięci.
  • #23 8360928
    janbernat
    Poziom 38  
    Sprawdzałem tylko wygaszacz- bo tylko to podałeś.
    Sam wygaszacz zajmuje 14% na ATmega168.
    Powinieneś sprawdzić stos i resztę w przypadku całego programu.
    Mega8 i Mega168 to są różne procesory.
    Działanie watchdoga też jest inne.
    No i skoro program zajmuje 71% w ATmedze168 to cały nie wejdzie do 8.
  • #24 8361478
    arktik1
    Poziom 27  
    Dobra.
    Podłącze na stałe tak jak poleciłeś wyżej, dodam jeszcze dodatkowe kondensatory na zasilanie wyświetlacza i Uc, zobaczymy co będzie.
    Po testuje parę dni, może to kwestia zakłóceń z zasilania.
  • #25 8361730
    janbernat
    Poziom 38  
    U mnie chodzi od wczoraj- ATmega168 8MHz.
    Ale bez watchdoga i z paroma przełączeniami na inny program.
    Nic się nie wiesza.
    Płytka propox EVBavr04.
  • #26 8362306
    arktik1
    Poziom 27  
    Zauważyłem że zaczyna mieć problemy gdy kod jest większy niż 75%.
    Mam 2 sztuki i obydwie działają tak samo, dlatego zastanawiałem się czy to może problem BASCOMa.
    Ustawienia stosu nic nie dają, CRYSTAL tez nie, "Lcd4busy.lib" pomogło w kwestii wyświetlania.
    Bezawaryjnie działa gdy kod ma max 65%.
  • #27 8362701
    gaskoin
    Poziom 38  
    na forum ktoś kiedyś pisał, że po przekroczeniu 50% program już mu nie działał, poszukaj, może było podane rozwiązanie. Ja bascoma nie znam w ogóle, więc nie pomogę
  • #28 8370878
    arktik1
    Poziom 27  
    W niektórych kodach widzę taki zapis:
    
    Deflcdchar 0 , 32 , 32 , 32 , 32 , 31 , 31 , 14 , 31       ' replace ? with number (0-7)
    Deflcdchar 2 , 32 , 32 , 32 , 32 , 24 , 30 , 7 , 3       'prawa
    Deflcdchar 5 , 32 , 32 , 32 , 32 , 3 , 15 , 28 , 24       'lewa
    Deflcdchar 1 , 31 , 14 , 32 , 32 , 17 , 31 , 31 , 32       'galka dol
    Deflcdchar 3 , 3 , 3 , 7 , 15 , 30 , 28 , 16 , 32 'prawa dol
    Deflcdchar 4 , 24 , 24 , 28 , 14 , 15 , 7 , 1 , 32       ' lewa dol
    

    a w niektórych taki:
    
    Deflcdchar 0 , 32 , 32 , 32 , 32 , 31 , 31 , 14 , 31       ' replace ? with num (0-7)
    CLS
    Deflcdchar 2 , 32 , 32 , 32 , 32 , 24 , 30 , 7 , 3       'prawa
    CLS
    Deflcdchar 5 , 32 , 32 , 32 , 32 , 3 , 15 , 28 , 24       'lewa
    CLS
    Deflcdchar 1 , 31 , 14 , 32 , 32 , 17 , 31 , 31 , 32       'galka dol
    CLS
    Deflcdchar 3 , 3 , 3 , 7 , 15 , 30 , 28 , 16 , 32 'prawa dol
    CLS
    Deflcdchar 4 , 24 , 24 , 28 , 14 , 15 , 7 , 1 , 32       ' lewa dol
    CLS
    

    Czy to coś daje?
  • #29 8373596
    ZbeeGin
    Poziom 39  
    CLS po każdej z nich jest marnotrawstwem pamięci. CLS po całym ciągu definicji może być, skasuje wyświetlacz i przełączy go na tryb odbioru danych pamięci obrazu a nie pamięci CGRAM.
  • #30 8373773
    manekinen
    Poziom 29  
    arktik1 napisał:
    Dlaczego na M8 działa bezproblemowo a na M168 nie?

    A może w końcu zdecydujesz się jakiej będziesz używał częstotliwości do taktowania procka? Atmega168 posiada jedynie wewnętrzny oscylator 8MHz i można go podzielić przez 8 bitem CLKDIV8 uzyskując 1MHz - więcej opcji oscylatora nie ma. Więc nie ma cudów i nie uzyskasz częstotliwości 2MHz jaką prawdopodobnie taktujesz swoją Atmege8 w której toto działa.

    Standardowa biblioteka obsługi wyświetlacza wykorzystuje stałe opóźnienia w przesyłaniu danych, i nic ją to nie interesuje czy wyświetlacz nadąża czy też nie. Tak że jeśli opóźnienia będą zbyt krótkie lub przewody do wyświetlacza długie, będą się dziać cuda. Biblioteka LCD4BUSY nie działa na stałych opóźnieniach, ale przed wysłaniem kolejnych danych sprawdza czy wyświetlacz jest gotowy - dlatego jak bardzo byś w tym taktowaniu nie namieszał, to będzie działać.

    arktik1 napisał:
    Tą dodatkową końcówkę da się "dorobić" z portu B?

    Ze standardową biblioteką nie. Uzyj tej modyfikacji (luc_lcd4busy), można każdy pin wyświetlacza przypisać do dowolnego pinu/portu mikrokontrolera. Ponadto, standardowa biblioteka lcd4busy będzie blokowała cały port mikrokontrolera pomimo że wyświetlacz wykorzysta tylko 7 bitów portu.
    http://www.mcselec.com/index2.php?option=com_forum&Itemid=59&page=viewtopic&t=4941

    Co do krzaków po zresetowaniu programu, zaraz po konfiguracji LCD daj ze dwa-trzy razy komendę Initlcd - powinno pomóc.
REKLAMA