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 zmienić parametry przebiegu na ATTINY26 w kodzie Bascom?

seg 05 Wrz 2007 22:31 1209 4
REKLAMA
  • #1 4254680
    seg
    Poziom 14  
    Posty: 170
    Pomógł: 2
    Ocena: 62
    Może tutaj mi ktoś życzliwy pomoże. Przepraszam, że robię kopiuj - wklej z innego forum, ale nikt mi tam nie pomógł, a zależy mi na czasie bo urlop się kończy :)

    ".nie zajmujmy się całością, a tym, że na wyprowadzeniu nr 1 ATTINY26 powinien być generowany przebieg o częstotliwośći 100Hz i czasie trwania stanu niskiego 70us. Chcę zmienić te parametry - gdzie to jest proszę mi powiedzieć??

    
    $regfile = "AT26DEF.DAT" 
    $crystal = 10000000 
    
    'ustaw port b3, b2 jako wyjścia 
     Ddrb = &B00001111 
    'ustaw stan wysoki na b3, b2 
     Portb = &B00001111 
    
    Pllcsr = &B00000010 
    Pllcsr = &B00000111 
    Ocr1c = 255 
    'wypełnienie 
    Ocr1a = 128 
    'wypełnienie 
    Ocr1b = 128 
    '1k 
    Osccal = 119 
    '1k 
    Tccr1b = 72 
    
    'włączenie PWM 
    Tccr1a = &B00010001 
    
    
     Const _on = 1 
     Const _off = 0 
    
    
    Config Pina.0 = Input 
    Config Pina.1 = Input 
    Config Pina.2 = Input 
    Config Pina.3 = Input 
    Config Pina.4 = Input 
    Config Pina.5 = Input 
    Config Pina.6 = Input 
    Config Pina.7 = Input 
    
    
    Porta = 255 
    
    
    Config Pinb.0 = Output 
    Config Pinb.1 = Output 
    
    
    
    Pulse Alias Portb.0 
    Noise Alias Portb.1 
    
    
    
    Dim Xdelay As Byte 
    Dim M_xdelay As Byte 
    Dim Sustain As Byte 
    Dim M_sustain As Byte 
    
    
    If Pina.0 = 0 Then 
    Xdelay.0 = 1 
    Else 
    Xdelay.0 = 0 
    End If 
    
    
    If Pina.1 = 0 Then 
    Xdelay.1 = 1 
    Else 
     Xdelay.1 = 0 
    End If 
    
    
    If Pina.2 = 0 Then 
     Xdelay.2 = 1 
    Else 
     Xdelay.2 = 0 
    End If 
    
    
    If Pina.3 = 0 Then 
     Xdelay.3 = 1 
    Else 
     Xdelay.3 = 0 
    End If 
    
    
     If Pina.4 = 0 Then 
     Sustain.0 = 1 
    Else 
     Sustain.0 = 0 
    End If 
    
    
    If Pina.5 = 0 Then 
    Sustain.1 = 1 
    Else 
     Sustain.1 = 0 
    End If 
    
    
     If Pina.6 = 0 Then 
    Sustain.2 = 1 
    Else 
    Sustain.2 = 0 
    End If 
    
    
    If Pina.7 = 0 Then 
    Sustain.3 = 1 
    Else 
    Sustain.3 = 0 
    End If 
    
    
    Select Case Xdelay 
          Case 0 : 
                Xdelay = 65                                     '26 
                M_xdelay = 38                                   '26 
          Case 1 : 
                Xdelay = 68                                     '27 
                M_xdelay = 35                                   '27 
          Case 2 : 
                Xdelay = 70                                     '28 
                M_xdelay = 33                                   '28 
          Case 3 : 
                Xdelay = 73                                     '29 
                M_xdelay = 30                                   '29 
          Case 4 : 
                Xdelay = 75                                     '30 
                M_xdelay = 28                                   '30 
          Case 5 : 
                Xdelay = 78                                     '31 
                M_xdelay = 25                                   '31 
          Case 6 : 
                Xdelay = 80                                     '32 
                M_xdelay = 23                                   '32 
          Case 7 : 
                Xdelay = 83                                     '33 
                M_xdelay = 20                                   '33 
          Case 8 : 
                Xdelay = 85                                     '34 
                M_xdelay = 18                                   '34 
          Case 9 : 
                Xdelay = 88                                     '35 
                M_xdelay = 15                                   '35 
          Case 10 : 
                Xdelay = 90                                     '36 
                M_xdelay = 13                                   '36 
          Case 11 : 
                Xdelay = 93                                     '37 
                M_xdelay = 10                                   '37 
          Case 12 : 
                Xdelay = 95                                     '38 
                M_xdelay = 8                                    '38 
          Case 13 : 
                Xdelay = 98                                     '39 
                M_xdelay = 5                                    '39 
          Case 14 : 
                Xdelay = 100                                    '40 
                M_xdelay = 3                                    '40 
          Case 15 : 
                Xdelay = 103                                    '41 
                M_xdelay = 0                                    '41 
    End Select 
    
    
    Select Case Sustain 
          Case 0 : 
                Sustain = 63                                    '25 
                M_sustain = 188                                 '25 
          Case 1 : 
                Sustain = 75                                    '30 
                M_sustain = 175                                 '30 
          Case 2 : 
                Sustain = 88                                    '35 
                M_sustain = 163                                 '35 
          Case 3 : 
                Sustain = 100                                   '40 
                M_sustain = 150                                 '40 
          Case 4 : 
                Sustain = 113                                   '45 
                M_sustain = 138                                 '45 
          Case 5 : 
                Sustain = 125                                   '50 
                M_sustain = 125                                 '50 
          Case 6 : 
                Sustain = 138                                   '55 
                M_sustain = 113                                 '55 
          Case 7 : 
                Sustain = 150                                   '60 
                M_sustain = 100                                 '60 
          Case 8 : 
                Sustain = 163                                   '65 
                M_sustain = 88                                  '65 
          Case 9 : 
                Sustain = 175                                   '70 
                M_sustain = 75                                  '70 
          Case 10 : 
                Sustain = 188                                   '75 
                M_sustain = 63                                  '75 
          Case 11 : 
                Sustain = 200                                   '80 
                M_sustain = 50                                  '80 
          Case 12 : 
                Sustain = 213                                   '85 
                M_sustain = 38                                  '85 
          Case 13 : 
                Sustain = 255                                   '90 
                M_sustain = 25                                  '90 
          Case 14 : 
                Sustain = 238                                   '95 
                M_sustain = 13                                  '95 
          Case 15 : 
                Sustain = 250                                   '100 
                M_sustain = 0                                   '100 
    End Select 
    
    
    Pulse = 1 
    Noise = 0 
    
    
    
    
    'GŁÓWNA PĘTLA PROGRAMU 
    Do 
     Noise = _on 
     Waitus 1 
     Pulse = _off 
     Waitus 70 
     Pulse = _on 
    
    
    $asm 
    lds r30 , {Xdelay}                                          '41 
    Giga1: 
    dec r30 
    cpi r30,0 
    brne Giga1 
    $end Asm 
    
    
    Noise = _off 
    
    
    $asm 
    lds r30 , {Sustain}                                         '100 
    Giga2: 
    dec r30 
    cpi r30,0 
    brne Giga2 
    $end Asm 
    
    
    Noise = _on 
    
    
    $asm 
    lds r30 , {M_Xdelay}                                        '41 
    Giga3: 
    dec r30 
    cpi r30,0 
    brne Giga3 
    $end Asm 
    
    
    $asm 
    lds r30 , {M_Sustain}                                       '100 
    Giga4: 
    dec r30 
    cpi r30,0 
    brne Giga4 
    $end Asm 
    
    
    Waitus 9788 
    Loop 
    
    
    End
    
    "
  • REKLAMA
  • #2 4255097
    Marczeli_P
    Poziom 20  
    Posty: 290
    Pomógł: 35
    Ocena: 12
    'GŁÓWNA PĘTLA PROGRAMU
    Do
    Noise = _on
    Waitus 1
    Pulse = _off
    Waitus 70
    Pulse = _on
    W tej czesci komenda waitus steruje opuznieniem.
  • REKLAMA
  • #3 4255603
    seg
    Poziom 14  
    Posty: 170
    Pomógł: 2
    Ocena: 62
    No tak, wiem, a przynajmniej się domyślałem, że te wait 70us to czas trwania stanu niskiego, ale chodzi mi również o częstotliwość tego przebiegu, bo 1us to chyba okres 1MHz, tak? Więc to nie to o ile się nie mylę. Proszę o wyjaśnienie np takiej sytuacji: co muszę zrobić aby zamiast stanu przebiegu o f=100Hz z czasem trwania st. niskiego 70us zrobić np 1kHz z czasem niskiego 40us. Rozumiem, że 70 zamienić na 40 ale gdzie jest ta częstotliwość schowana? Dzięki z góry.
  • REKLAMA
  • #4 4256916
    Paweł Es.
    VIP Zasłużony dla elektroda
    Posty: 6981
    Pomógł: 1236
    Ocena: 692
    Ten program daje następujący ciąg sygnałów Pulse i Noise:

    Start:
       Pulse=1
       Noise=0
    
    Petla:
       Noise=1
                     Opóźnienie=1 us
       Pulse=0
                     Opóźnienie=70 us   <-- tu zmieniasz na 40 us
       Pulse=1
                     Opóźnienie1 Xdelay
       Noise=0
                     Opóźnienie1 Sustain
       Noise=1
                     Opóźnienie1 M_Xdelay
                     Opóźnienie1 M_Sustain
                     Opóźnienie 9788 us              ' <--- tu zmieniasz okres całości
     
       GOTO  Pętla
    
    

    Czyli Okres sygnału Pulse wynosi:

    Tpulse=70us +Opóźnienie1(103)+Opóźnienie1(250)+9788 us

    Opóźnienie1 to czas wykonania tych wstawek asemblerowych

    Xdelay i Mxdelay=103
    Sustain+M_sustain=250 lub 251 (zależnie czy z portów jest parzysta czy nieparzysta liczba)


    Czyli okres OBU sygnałów zmienisz zmniejszając to ostatnie duże opóźnienie (9788 na ok. 900 us dla 1 kHz)

    Musisz zmierzyć na symulatorze ile trwają te pętle asemblerowe zależnie od parametru wejściowego i odjąć te czasy od wymaganego okresu sygnału Pulse (i odjąć jeszcze 71us) - otrzymaną wartość wstawić w ostatnim opóźnieniu





    Tę straszliwą ilość IF i CASE na początku można zwinąć do postaci:

    
    
    Xdelay=Not Pina                         ' pobranie stanu portu A
    Xdelay=Xdelay and &B00001111  ' wydzielenie 4 najmłodszych bitów
    
    Sustain = Not Pina           ' pobranie stanu pinów portu A    
    Shift sustain, right, 4       ' przesunięcie 4 starszych bitów o 4 pozycje w prawo
    Sustain= Sustain And &B00001111  ' wydzielenie tylko 4 najmłodszych bitów
    
    
    Xdelay=Lookup(xdelay,Dat_delay) ' Pobranie wartości X
    M_xdelay=103-Xdelay
    
    ' Pobranie wartości dla sustain
    
    IF Sustain.0=0 then
       Sustain=LookUp(sustain, Dat_sustain)
       M_Sustain=251-Sustain
    Else
      Sustain=LookUp(Sustain,Dat_sustain)
      M_Sustain=250-Sustain
    END
    
    ' Tu wchodzi główna pętla programu
    
    
    END  ' Koniec programu
    
    ' Te linie wstawiamy po ostatniej linii programu (po END)
    
    ' Stałe dla Xdelay
    
    Dat_Delay:
    
       Data 65,68,70,73,75,78,80,83,85,88, 90, 93,95,98,100,103
    ' Stałe dla sustain
    
    Dat_sustain:
      Data 63,75,88,100,113,125,138,150,163,175,188,200,213,225,238,250
    
    
  • #5 4257098
    seg
    Poziom 14  
    Posty: 170
    Pomógł: 2
    Ocena: 62
    ..ale mi nasmarowałes :) Świetnie, ale najpierw muszę to "przegryźć" na spokojnie bo trochę kosmiczne to dla mnie. Dziękuję!!
REKLAMA