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

[mega8][bascom]Czy możliwe jest wygenerowanie sygnału 40KHz?

Ture11 28 Sie 2009 19:47 2185 13
  • #1 6954680
    Ture11
    Poziom 39  
    Witam.
    Z góry powiem: wiem, że istnieje coś takiego jak google, wiem, że były te tematy wałkowane wiele razy, i proszę o odpowiedź:

    Czy da się wygenerować 40 KHz w atmega8 na kwarcu 8MHz? Męczę się z tym już od paru godzin i jak narazie udało mi się uzyskać max 30Us.
    Bardzo prosiłbym o jakiś kawałek kodu, napisałem coś takiego:
    
    $regfile = "M8def.dat"
    $crystal = 8000000
    Cls
    Config Pind.6 = Output
    Config Timer0 = Timer , Prescale = 1
    
    On Timer0 Odmierz_12us
    Enable Interrupts
    Enable Timer0
    Load Timer0 = 255
    
    Do
    Loop
    End
    
    
    Odmierz_12us:
    
    Toggle Portd.6
    
    Return
    

    ale nie trzyma się kupy, daje tylko 30us i sądze, że mój błąd siedzi w komendzie
    Load Timer0 = 255

    Byłbym bardzo wdzięczny za pomoc.
    Pozdrawiam.
  • Pomocny post
    #2 6954739
    Mat_91
    Poziom 25  
    Tak jest możliwe. Skoro otrzymujesz za duży czas to zmniejsz wartość wpisywana do timer0 (nie znam bascom więc nie wiem za co który rejestr odpowiada wartość wpisana do timer0, aczkolwiek 40kHz otrzymasz bez problemu).
  • Pomocny post
    #3 6954746
    K_o_n_r_a_d
    Poziom 23  
    Oczywiście, że się da.
    Po 1. Z preskalerem =1 nie uzyskasz czasu dłuższego jak ok. 30us. Zmień preskaler.

    Po 2. Do generowania częstotliwości służy tryb COMPARE timera - i właśnie tak to zrób. Poszukaj na forum, było wielokrotnie.

    Dodano po 1 [minuty]:

    Dawno temu pisałem o tym: https://www.elektroda.pl/rtvforum/topic359777.html#1821364
  • #4 6954892
    Ture11
    Poziom 39  
    Witam.
    Dziękuje bardzo, czy dobrze myślę, że dla preskalera 1 compare ma być równe 100?
    Znalazłem taki kawałek kodu:

    
    Config Timer1 = Timer , Prescale = 1 , Compare A = Toggle , Clear Timer = 1
    Config Timer0 = Timer , Prescale = 1024
    Compare1a = 100
    
  • Pomocny post
    #5 6954928
    K_o_n_r_a_d
    Poziom 23  
    Przy zegarze=8Mhz, preskalerze=1 i rejestrze Compare1a=100 otrzymasz częstotliwość 40kHz
  • Pomocny post
    #6 6955184
    janbernat
    Poziom 38  
    
    '$sim
    $regfile = "m8def.dat"
    
    $crystal = 8000000
    'Config Lcdpin = Pin , Db7 = Portb.0 , Db6 = Portb.1 , Db5 = Portb.2 , Db4 = Portb.3 , E = Portb.4 , Rs = Portb.5
    'Config Pinb.3 = Output
    Config Portb = Output
    'Config Timer2 = Timer Prescale = 1 , Compare = Toggle , Clear Timer = 1
    Enable Interrupts
    Ocr2 = 102
    Tccr2 = 25
    'Enable Timer2
    'Enable Oc2
    'On Oc2 Licz
    'Enable Oc2
    'Dim Paczka As Byte
    'Paczka = 0
    'Set Timsk.ocie2
    'Set Timsk.toie2
    'Set Tifr.ocf2
    'Set Tifr.tov2
    'Start Timer2
    'On Oc2 Impulsy
    
    
    'Do
    
    'If Paczka >= 10 Then
       'Waitms 100
    '   Paczka = 0
       'Start Timer2
    '   Tccr2 = 25
    '   Waitus 250
    '   Tccr2 = 24
    '   Wait 1
    'End If
    
    'Loop
    
    'End
    
    'Licz:
    'Incr Paczka
    'If Paczka = 10 Then
    'Tccr2 = 24
    'Stop Timer2
    'End If
    'Return
    

    To jest na Timer2.
    Niektóre co jest ' -czyli rem można wykorzystać do wysyłania paczek
    impulsów.
    Podejrzewam że robisz coś na ultradźwiękach.
    Ja też.
    Żeby to działało dobrze to zaczyna być trudne.
    I programowo i sprzętowo.
    A timer1 zostaw do ważniejszych potrzeb.
    A jeszcze:
    fusebity na wewn. oscylator.
    I bez podziału przez 8.
  • Pomocny post
    #7 6955474
    pmmisiek
    Poziom 15  
    Witam,

    Najprościej jak się da, nie używając timerów można umieścić poniższy ciąg instrukcji w pętli, która wykona się określoną ilość razy a następnie program przejdzie dalej

    
    Set Portb.1
    Waitus 13
    Reset Portb.1
    Waitus 13
    


    Nie jest to dokładnie 40kHz (38,4kHz) ale do nadajnika ultradźwięków się nadaje. Przetestowałem to kiedyś i działało ok.

    Pozdrawiam
  • #8 6955491
    Ture11
    Poziom 39  
    Dziękuje wszystkim.
    Owszem, próbuje zrobić pomiar odległości na ultradzwiękach do małego robocika o dumnej nazwie "niuniojazd" ale to szczegół.
    Ogólnie mam problem z odbiorem tych wysłanych ultradźwięków, ale to kwestia sprzętowa, na wyjściu tl072 mam ciągle stan wysoki.

    Pozdrawiam.
  • #10 6958298
    Ture11
    Poziom 39  
    Witam.
    Znam ten temat, nawet zadawałem w nim parę pytań (skoro stworzyłem własny temat to po co mam komuś wtórnie zawracać głowe w jego temacie?), ale potem miałem przerwę. Raczej nic nie ma tam na scalaku - mirekk36 z tego co pamiętam chciał to robić na komparatorze, ale nie mogę znaleźć nic na bascoma, a niestety C wogóle nie znam. TL072 zasilany z 7805 (5V), ale cały moduł jest z gazety "elektronik nowy", tylko oni nie udostępniają wsadu, co jest błędem. TL072 był nowy, ale przeleżał parę lat, może być uszkodzony? Raczej coś na płytce. Na wyjściu z TL-a dany jest tranzystor bc547. Czy stan wysoki na wyjściu jest uzasadniony? Czy może jakiś błąd w elementach RC?
  • #11 6958313
    Ahcinga
    Poziom 13  
    Pokaż schemat to zastanowimy się czy uszkodzony, czy coś źle podłączone, czy coś jeszcze innego. Z Twojego opisu to trudno coś wywróżyć :)
  • #12 6958370
    Ture11
    Poziom 39  
    Heh, witam. Pierwszy raz mam okazję rozmawiać z Young Lady :-)

    [mega8][bascom]Czy możliwe jest wygenerowanie sygnału 40KHz?

    To na zdjęciu zaznaczone pętlą to schemat mojego modułu.
  • Pomocny post
    #13 6958374
    janbernat
    Poziom 38  
    Nie jest TL072 uszkodzony- nawet jak leżał 100 lat.
    To wymaga zasilania nieco większego niż 5V
    Zrobiłem wzmacniacz różnicowy na zasilaniu 5V na BF245A i jest on w tamtym temacie.
    Przy tym zasilaniu to nie będzie rewelacja.
    To jest zbyt małe napięcie.
    Pracuję nad tym.
    Może to da się zrobić na MAX232 i prostowniku.
    Zasilanie.
    Wysłałem ten wzmacniacz do mirekk36.
    Mirekk36 chciał to robić na komparatorze bo jest słuszne rozwiązanie.
    Man nadzieję że coś z tym zrobi(programowo).
  • #14 6958484
    Ture11
    Poziom 39  
    Wiatm.
    Od razu powiem, że nie zależy mi na dużej odległości, wystarczy jakieś 30 cm. Chociaż jak ktoś gdzieś ma to mogę się pobawić i na więcej.
REKLAMA