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

generator liczb losowych na atmega48 <basic>

kacper1611x 10 Lut 2010 18:58 1913 2
  • #1 7674389
    kacper1611x
    Poziom 10  
    Witam
    Chciałem zrobić prosty układ zapalający diody w losowej kolejności
    połączyłem wszystko według schematu przedstawionego poniżej:

    generator liczb losowych na atmega48 <basic>

    I zaprogramowałem uC tym programem:
    Config Portb = &B01111111
            Portb = &B11111111
    
    Dim Cyfra(5) As Byte
    Dim R As integer
    
    Cyfra(1) = 254
    Cyfra(2) = 252
    Cyfra(3) = 248
    Cyfra(4) = 240
    
    Do
    For R = 1 To 4
    Portb = Cyfra(r)
    wait 1
    Next R
    
    Loop
    End


    Tyle że po zaprogramowaniu i podłączeniu do zasilania żadna dioda się nie świeci i nie zmienia.
    uC na pewno jest sprawny bo po zaprogramowaniu go innym programem wszystko działa jak należy.

    Wcześniej zaprogramowałem to jeszcze tym kodem:
    Config Portb = &B01111111
            Portb = &B11111111
    Config Adc = Single , Prescaler = Auto , Reference = Internal
    Dim I As Word
    do
    I = rnd(7)
    if I = 1 then portb = &B11111110
    if I = 2 then portb = &B11111100
    if I = 3 then portb = &B11111000
    if I = 4 then portb = &B11110000
    if I = 5 then portb = &B11100000
    if I = 6 then portb = &B11000000
    waitms 35
    portb = &B11111111
    waitms 35
    loop
    end

    I wszystko działało lecz ten kod po każdym ponownym podłączeniu zasilania zaświeca ledy według tego samego schematu.

    Ma ktoś pomysł jak przerobić ten pierwszy program lub zna ktoś jeszcze inny sposób?
    Za wszelkie pomysły dziękuje.
  • #2 7675006
    xury
    Specjalista automatyka domowa
    Kod pierwszy działa, ale nie tak jak Ty byś chciał.
    U Ciebie może nie działać z kilku przyczyn:
    brak definicji procesora w kodzie
    źle ustawione fusebity
    brak definicji $crystal
    Nie wspomnę też o schemacie, np. filtracja zasilania itd.
    Jeśli chcesz mieć większą pseudolosowość to modyfikuj ___RSEED np. tak jak masz opisane to w helpie.
  • #3 7675024
    mirekk36
    Poziom 42  
    A co to za pierwszy program ???

    Po pierwsze - widziałeś przypadkiem, że ten procek ma jeszcze 2 nogi zasilania, które łaskawie pominąłeś ??? mowa o AVCC (pin20) gdzie trzeba także podać VCC oraz GND (pin22)

    Po drugie - weź sobie poszukaj tu na elektrodzie czy w helpie Bascoma takich podstawowych programów

    i zobacz do czego służą dyrektywy $crystal , $regfile i inne

    toż trzeba zdefiniować dla jakiego procka kompilujesz program, jakiego taktowania używasz tzn częstotliwości itd itd

    No i nie licz zbydnio ta pseudolosowość w wykonaniu poleceń typu RND
REKLAMA