Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Wyświetlacz widmowy... raz jeszcze

Darawariusz 20 Gru 2009 17:13 2923 8
  • #1 20 Gru 2009 17:13
    Darawariusz
    Poziom 10  

    Witam wszystkich forumowiczów...

    Wykonałem płytke do wyświetlacza widmowego wg. schematu (tam gdzie to 3V to wpiąłem przewody od USB zeby zaprogramowac, bo do programowania potrzebne 5V)


    Link

    wygląda to tak...


    Link1

    nie było problemu wykonac jednak gorzej u mnie z programowaniem...
    zakupiłem na allegro programator stk 200/300, program wyglada nastepująco

    Code:
    ' Program widmowy wyswietlacz LED
    
    $crystal = 8000000                                          ' 8 MHz
    Config Portb = &B11111111                                   'wszystkie porty B jako wyjścia
           Portb = &B00000000                                   'stan niski na porcie B
    Config Portd = &B1111111                                    'wszystkie porty D jako wyjścia
           Portd = &B0000000                                    'wszystko wyłaczone
    Dim A As Byte                                               'jak na zmienną wystarczy jeden bajt to nie trzeba od razu integera

    A = 0

       Do
       Portd = Lookup(a , Ex)
       Waitus 1000
       Portd = &B0000000
       A = A + 1
       If A = 23 Then Exit Do                                   ' napis wyswietla sie tylko raz po zresetowaniu
       Loop
    End


    Ex:
    Data 0 , 0 , 255 , 64 , 32 , 16 , 32 , 64 , 255 , 0 , 0 , 0 , 60 , 66 , 129 , 129 , 129 , 66 , 60 , 0 , 0 , 255 , 64 , 32 , 16 , 32 , 64 , 255 , 0
    ' kody poszczegolnych kolumn napisu


    pobrałem program Bascom AVR, zainstalowałem drukarke pod LPT, podlączyłem do kompa wszystko jak trzeba i dalej postepowałem tak...

    Link1
    Link2
    Link3
    Link4

    (fusebitow nie przestawiałem bo po pierwsze nie bardzo mam pojecia jak a po drugie wystarszy zeby układ pracował na wewnetrznym oscylatorze ktory jest ustawiony fabrycznie )

    to chyba wszystko co zrobiłem... skoro nie chce sie programowac to gdzies musi byc błąd... ale gdzie? bardzo prosił bym o pomoc...

    jesli czegos istotnego nie napisałem to prosze o stosowny komentaz

    pozdrawiam --> Darek

    0 8
  • #2 22 Gru 2009 16:28
    guuciek
    Poziom 14  

    A ustawiony masz w bascomie ten programator który posiadasz??
    Bo według tego co tu pisze to nie widzi programatora albo raczej pracuje na sample electronic programmer . Lepiej programować AVRDUDE , i jakiejś nakładce graficznej do niego np . AVR burnomat .
    Tam ustawić swój programator i wyjście którego używa (lpt) . Ponadto dokładanie wtedy zostanie wyrzucony błąd co jest nie tak

    W basomie swój programator ustawiasz w options --> programmer --> i wybierasz stk200/300
    Potem ustawiasz odpowiedni port (adres) i powinno działać . Jednak jak najbardziej polecam AVR z ww nakładką lub lepiej , z nakładką którą napisałem ci na PW .

    0
  • #3 23 Gru 2009 14:41
    Darawariusz
    Poziom 10  

    po trudach udało sie wrescia zaprogramowac uC Bascomem AVR jednakchyba z programem cos nie tak... co jest zle w tym programie ze nie wyswietla sie napis ?

    dodam jeszcze ze reset powienien nastapic po zwarciu resetu z GND (kontaktronem)...


    Code:
    ' Program widmowy wyswietlacz LED
    
    $regfile = "attiny2313.dat"
    $crystal = 8000000                                          ' 8 MHz
    Config Portb = &B11111111                                   'wszystkie porty B jako wyjścia
           Portb = &B00000000                                   'stan niski na porcie B
    Config Portd = &B1111111                                    'wszystkie porty D jako wyjścia
           Portd = &B0000000                                    'wszystko wyłaczone
    Dim A As Byte                                               

    A = 0

       Do
       Portd = Lookup(a , Ex)
       Waitus 1000
       Portd = &B0000000
       A = A + 1
       If A = 42 Then Exit Do               ' napis wyswietla sie tylko raz po zresetowaniu
       Loop
    End


    Ex:
    Data 255 , 255 , 195 , 231 , 126 , 62 , 28 , 0 , 128 , 192 , 240 , 124 , 127 , 99 , 127 , 99 , 124 , 240 , 192 , 128 , 0 , 255 , 255 , 49 , 49 , 127 , 206 , 128 , 0 , 60 , 126 , 195 , 195 , 195 , 195 , 126 , 60 , 0 , 0 , 0 , 0 , 0
    ' kody poszczegolnych kolumn napisu

    0
  • #4 24 Gru 2009 01:10
    gorsomir
    Poziom 13  

    Witam w twoim kodzie masz zadeklarowaną prace z częstotliwością 8 MHz a skoro nie zmieniałeś fabrycznych fuse bitów to uC pracuje z częstotliwością 1Mhz

    Pozdrawiam

    0
  • #5 24 Gru 2009 06:22
    emarcus
    Poziom 35  

    Darawariusz napisał:
    po trudach udało sie wrescia zaprogramowac uC Bascomem AVR jednakchyba z programem cos nie tak... co jest zle w tym programie ze nie wyswietla sie napis ?

    dodam jeszcze ze reset powienien nastapic po zwarciu resetu z GND (kontaktronem)...



    A skad wiadomo ze napis nie jest wyswietlany?
    Popatrz na swoj kod; kazdy element data z tabeli ma byc wyswietlany przez 1000us czyli 1 ms; tych elementow masz az 42 co daje calkowity czas nie wiecej niz 100ms.
    Zwazywszy ze ten napis ma sie wyswietlic tylko jeden raz i program jest zatrzymany na wygaszonych LEDs; oko ludzkie jest dobrym 'mechanizmem' ,ale nie az tak doskonalym aby odczytac multiplexowy napis trwajacy tak krotki czas. Jak duzo czasu potrzebuja twoje LED aby osiagnac pelna jasnosc? Niektore potrzebuja 100 ns, inne o wiele dluzej.
    Czy istnieje realna szansa zauwazenia tego napisu?
    Pomijam tu sprawe ewentualnej rozbieznosci pomiedzy czestotliwoscia deklarowana w programie a faktyczna 'f' taktowania processora, (sugerowane wyzej ustawienia fuse bitow), od ktorej zalezy czas swiecenia LEDs .

    e marcus

    0
  • #6 24 Gru 2009 11:43
    guuciek
    Poziom 14  

    Ale kontrakton zwiera reset z masą, przez co w tym samym punkcie obrotu, program zaczyna się od nowa.
    Ale coś mi w tym kodzie nie pasuje tak w ogóle?
    Czemu te bity przypisywane są do portu d skoro używasz portu b?

    0
  • #7 24 Gru 2009 17:57
    emarcus
    Poziom 35  

    guuciek napisał:
    Ale kontrakton zwiera reset z masą przez co w tym samym punkcie obrotu program zaczyna się od nowa .


    Nie, Program nie zaczyna sie od nowa w tym miejscu!!!
    Jedynie co mozesz powiedziec to: processor resetuje sie w tym miejscu, a i to nie jest zupelnie poprawne, bo na kontaktronie mamy drgania stykow i nastepuje wielokrotny reset. Inicjalizacja processora trwa pewien czas (? ms); zatem jak duzo czasu pozostaje na wykonanie programu do nastepnego Reset? I jak to sie ma do miejsca obrotu gdzie ma nastapic wyswietlanie napisu?
    Koncept Resetu processora za kazdorazowym obrotem nie jest tu do przyjecia, tak samo jak synchronizacja 'polozenia' obrotu z poczatkiem programu (nazwijmy to "Home Position") nie moze byc sterowana kontaktronem. Jezeli ma to byc magnetyczne to juz raczej "Hall Effect Switch". Latwiejsze w realizacji i dokladniejsze jest sterowanie optyczne.

    e marcus

    0
  • #8 24 Gru 2009 22:31
    guuciek
    Poziom 14  

    Co do tego co napisałeś powyżej to się zgodzę , jednak kontaktron nie jest zły do tego celu . Co prawda ma swoją bezwładność ale jak na taki projekt wystaracza w 100 % . Też nie pochwalam ciągłego resetowania procesora i zgadzam się że iskrzenie styków w tym nie pomaga . Ale wystarczy napisać program który czeka tylko do pierszego stanu niskiego (nie na resecie ) i potem robi swoje a za ten czas kontaktron się ustabilizuje .
    Np dać 2 pętle , duża z całm kodem i wyświetlaniem i mała w środku dużej np :

    do
    do
    loop until pind.1=0
    'procedura wyświetlania tekstu

    loop
    end

    I w ten sposób praktycznie zaczyna się wszystko w jednym punkcie , jako że program robi swoje , jak skończy to czeka na ponowny sygnał niski i wraca do wyświetlania .

    Co do czasu resetu jest on też zależny od ustawień fusów , 1ms , 4 ms , 64 ms .

    0