Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

[Atmega8][Bascom] Pomoc w przepisaniu programu na Atmega8

otto25 22 Jun 2010 22:19 2342 4
  • #1
    otto25
    Level 15  
    Witam, na początek dodam że dopiero zaczynam z Bascom'em. Mam problem w przepisaniu programu z ATTINY2313 na ATMEGA8.
    Oryginalną wersję zamieszczam poniżej:
    '************* Konfiguracja uC *****************
    '***********************************************
    $regfile = "attiny2313.dat"
    $crystal = 16000000
     
    Config Portb = &B11111111 : Portb = &B11111111
    Config Portd = &B00000000 : Portd = &B11111111
     
    Config Timer0 = Timer , Prescale = 8
    Enable Timer0 : On Timer0 Prztimer0
     
    Enable Interrupts
    '********** Konfiguracja uC Koniec  ************
     
    '******************  Nazwy *******************
    '***********************************************
    Rd Alias Portb.0
    Gd Alias Portb.1
    Bd Alias Portb.2
     
    Rd2 Alias Portb.3
    Gd2 Alias Portb.4
    Bd2 Alias Portb.5
     
    Syg_led Alias Portb.7
    Sw_port Alias Pind
     
    '*************  Nazwy Koniec  ****************
     
    '******************  Zmienne *******************
    '***********************************************
    Dim Licznik As Byte
    Dim Rled As Byte , Bled As Byte , Gled As Byte
    Dim Rand_r As Byte , Rand_g As Byte , Rand_b As Byte
    Dim Pomoc As Byte
    Dim Flaga As Bit
    Dim Dzielnik As Word
    Dim Dzielnik2 As Byte
    Dim Dzielnik3 As Byte
    Dim Szybkosc As Byte
    Dim Licznik_sw As Byte
    Dim Stan_portu As Byte
     
    Dim Arg As Word
    Dim Wartosc As Word
    Dim Pozycja As Word
     
    Dim Stopbit As Bit
     
    Dim Animacja As Byte
     
    '*************  Zmienne Koniec  ****************
     
    '************ Warunki Poczatkowe ***************
    '***********************************************
    Pozycja = 0
    Dzielnik2 = 0
    Szybkosc = 10
    Stopbit = 1
    Animacja = 0
    '*******  Warunki Poczatkowe Koniec  ***********
     
    '**************  Petla glowna ******************
    '***********************************************
    Do
     
     If Flaga = 1 Then                                          'co 32ms
       Flaga = 0
     
       Gosub Przyciski
     
       Incr Dzielnik2
       If Dzielnik2 >= Szybkosc And Stopbit = 1 Then
         Dzielnik2 = 0
     
         Syg_led = Not Syg_led
     
         'pierwszy tryb  - przejscia plynne ustalone
         If Animacja = 0 Then
           Incr Pozycja
           If Pozycja = 900 Then Pozycja = 0
           Gosub Pozycja_do_rgb
         End If
     
         'drugi tryb - losowe przejscia
         If Animacja = 1 Then
           Incr Pozycja
           If Pozycja >= 50 Then
             Pozycja = 0
             Rand_r = Rnd(3)
             Rand_g = Rnd(3)
             Rand_b = Rnd(3)
           End If
     
           If Rand_r = 1 Then If Rled < 100 Then Incr Rled
           If Rand_r = 2 Then If Rled > 0 Then Decr Rled
     
           If Rand_g = 1 Then If Gled < 100 Then Incr Gled
           If Rand_g = 2 Then If Gled > 0 Then Decr Gled
     
           If Rand_b = 1 Then If Bled < 100 Then Incr Bled
           If Rand_b = 2 Then If Bled > 0 Then Decr Bled
         End If
     
         'trzeci tryb - losowy kolor
         If Animacja = 2 Then
           Pozycja = Rnd(900)
           Gosub Pozycja_do_rgb
         End If
     
       End If
     End If
     
    Loop
    End
    '************ Petla glowna Koniec **************
     
    '************ Przerwanie timer 0 ***************
    '***********************************************
    Prztimer0:
     
     Incr Licznik
     If Licznik = 100 Then Licznik = 0
     
     If Licznik < Rled Then
      Reset Rd
      Reset Rd2
     Else
      Set Rd
      Set Rd2
     End If
     
     If Licznik < Gled Then
      Reset Gd
      Reset Gd2
     Else
      Set Gd
      Set Gd2
     End If
     
     If Licznik < Bled Then
      Reset Bd
      Reset Bd2
     Else
      Set Bd
      Set Bd2
     End If
     
     Incr Dzielnik
     If Dzielnik = 250 Then
       Dzielnik = 0
       Set Flaga
     End If
     
    Return
    '******** Przerwanie timer 0 Koniec ************
     
    '************   Inne Etykiety    ***************
    '***********************************************
    Przelicz:                                                   'funkcja \_ _ _ _/^^^
      If Arg > 899 Then Arg = Arg - 900
     
      If Arg > 100 And Arg < 500 Then Wartosc = 0
      If Arg <= 100 Then Wartosc = 100 - Arg
      If Arg >= 500 And Arg <= 600 Then Wartosc = Arg - 500
      If Arg > 600 Then Wartosc = 100
    Return
     
    Pozycja_do_rgb:
      Arg = Pozycja
      Gosub Przelicz
      Rled = Wartosc
      Arg = Pozycja + 300
      Gosub Przelicz
      Gled = Wartosc
      Arg = Pozycja + 600
      Gosub Przelicz
      Bled = Wartosc
    Return
     
    Przyciski:
    If Sw_port <> 255 And Stan_portu = Sw_port Then
      Incr Licznik_sw
      If Licznik_sw = 10 Then
        Select Case Stan_portu
          Case 126:                                             'plus
            Licznik_sw = 5
            If Szybkosc > 1 Then Decr Szybkosc
          Case 125:                                             'minus
            Licznik_sw = 5
            If Szybkosc < 40 Then Incr Szybkosc
          Case 124:                                             'plus i minus
            Stopbit = Not Stopbit
            Syg_led = 1
          Case 111:                                             ' R
            Pozycja = 700
            Gosub Pozycja_do_rgb
          Case 119:                                             ' G
            Pozycja = 400
            Gosub Pozycja_do_rgb
          Case 123:                                             ' B
            Pozycja = 100
            Gosub Pozycja_do_rgb
          Case 110:                                             'plus R
            Licznik_sw = 8
            If Rled < 100 Then Incr Rled
          Case 109:                                             'minus R
            Licznik_sw = 8
            If Rled > 0 Then Decr Rled
          Case 118:                                             'plus G
            Licznik_sw = 8
            If Gled < 100 Then Incr Gled
          Case 117:                                             'minus G
            Licznik_sw = 8
            If Gled > 0 Then Decr Gled
          Case 122:                                             'plus B
            Licznik_sw = 8
            If Bled < 100 Then Incr Bled
          Case 121:                                             'minus B
            Licznik_sw = 8
            If Bled > 0 Then Decr Bled
          Case 103:                                             ' R G
            Rled = 100
            Gled = 100
            Bled = 0
          Case 115:                                             ' G B
            Rled = 0
            Gled = 100
            Bled = 100
          Case 107:                                             ' R B
            Rled = 100
            Gled = 0
            Bled = 100
          Case 99:                                              ' R G B
            Rled = 100
            Gled = 100
            Bled = 100
          Case 108:                                             ' plus minus R
            Animacja = 0
          Case 116:                                             ' plus minus G
            Animacja = 1
          Case 120:                                             ' plis minus B
            Animacja = 2
     
        End Select
     
      End If
    Else
      Stan_portu = Sw_port
      Licznik_sw = 4
    End If
     
    Return
    '********    Inne Etykiety Koniec  ************

    Poniżej mój 'przerobiony' i nie działający w pełni tzn kolory się zmieniają same, płynnie, brak reakcji na przyciski.
    $regfile = "m8def.dat"
    $crystal = 16000000
    Config Portb = &B11111011 : Portb = &B11111011
    Config Portd = &B00000000 : Portd = &B11111111
    Config Portc = &B10000000 : Portc = &B10000000
    
    Config Timer0 = Timer , Prescale = 8
    Enable Timer0 : On Timer0 Prztimer0
    
    Enable Interrupts
    '********** Konfiguracja uC Koniec  ************
    
    '******************  Nazwy *******************
    '***********************************************
    Rd Alias Portb.0
    Gd Alias Portb.1
    Bd Alias Portb.2
    
    Rd2 Alias Portb.3
    Gd2 Alias Portb.4
    Bd2 Alias Portb.5
    
    Syg_led Alias Portc.1
    Sw_port Alias Pind
    
    '*************  Nazwy Koniec  ****************
    
    '******************  Zmienne *******************
    '***********************************************
    Dim Licznik As Byte
    Dim Rled As Byte , Bled As Byte , Gled As Byte
    Dim Rand_r As Byte , Rand_g As Byte , Rand_b As Byte
    Dim Pomoc As Byte
    Dim Flaga As Bit
    Dim Dzielnik As Word
    Dim Dzielnik2 As Byte
    Dim Dzielnik3 As Byte
    Dim Szybkosc As Byte
    Dim Licznik_sw As Byte
    Dim Stan_portu As Byte
    
    Dim Arg As Word
    Dim Wartosc As Word
    Dim Pozycja As Word
    
    Dim Stopbit As Bit
    
    Dim Animacja As Byte
    
    '*************  Zmienne Koniec  ****************
    
    '************ Warunki Poczatkowe ***************
    '***********************************************
    Pozycja = 0
    Dzielnik2 = 0
    Szybkosc = 10
    Stopbit = 1
    Animacja = 0
    '*******  Warunki Poczatkowe Koniec  ***********
    
    '**************  Petla glowna ******************
    '***********************************************
    Do
    
     If Flaga = 1 Then                                          'co 32ms
       Flaga = 0
    
       Gosub Przyciski
    
       Incr Dzielnik2
       If Dzielnik2 >= Szybkosc And Stopbit = 1 Then
         Dzielnik2 = 0
    
         Syg_led = Not Syg_led
    
         'pierwszy tryb  - przejscia plynne ustalone
         If Animacja = 0 Then
           Incr Pozycja
           If Pozycja = 900 Then Pozycja = 0
           Gosub Pozycja_do_rgb
         End If
    
         'drugi tryb - losowe przejscia
         If Animacja = 1 Then
           Incr Pozycja
           If Pozycja >= 50 Then
             Pozycja = 0
             Rand_r = Rnd(3)
             Rand_g = Rnd(3)
             Rand_b = Rnd(3)
           End If
    
           If Rand_r = 1 Then If Rled < 100 Then Incr Rled
           If Rand_r = 2 Then If Rled > 0 Then Decr Rled
    
           If Rand_g = 1 Then If Gled < 100 Then Incr Gled
           If Rand_g = 2 Then If Gled > 0 Then Decr Gled
    
           If Rand_b = 1 Then If Bled < 100 Then Incr Bled
           If Rand_b = 2 Then If Bled > 0 Then Decr Bled
         End If
    
         'trzeci tryb - losowy kolor
         If Animacja = 2 Then
           Pozycja = Rnd(900)
           Gosub Pozycja_do_rgb
         End If
    
       End If
     End If
    
    Loop
    End
    '************ Petla glowna Koniec **************
    
    '************ Przerwanie timer 0 ***************
    '***********************************************
    Prztimer0:
    
     Incr Licznik
     If Licznik = 100 Then Licznik = 0
    
     If Licznik < Rled Then
      Reset Rd
      Reset Rd2
     Else
      Set Rd
      Set Rd2
     End If
    
     If Licznik < Gled Then
      Reset Gd
      Reset Gd2
     Else
      Set Gd
      Set Gd2
     End If
    
     If Licznik < Bled Then
      Reset Bd
      Reset Bd2
     Else
      Set Bd
      Set Bd2
     End If
    
     Incr Dzielnik
     If Dzielnik = 250 Then
       Dzielnik = 0
       Set Flaga
     End If
    
    Return
    '******** Przerwanie timer 0 Koniec ************
    
    '************   Inne Etykiety    ***************
    '***********************************************
    Przelicz:                                                   'funkcja \_ _ _ _/^^^
      If Arg > 899 Then Arg = Arg - 900
    
      If Arg > 100 And Arg < 500 Then Wartosc = 0
      If Arg <= 100 Then Wartosc = 100 - Arg
      If Arg >= 500 And Arg <= 600 Then Wartosc = Arg - 500
      If Arg > 600 Then Wartosc = 100
    Return
    
    Pozycja_do_rgb:
      Arg = Pozycja
      Gosub Przelicz
      Rled = Wartosc
      Arg = Pozycja + 300
      Gosub Przelicz
      Gled = Wartosc
      Arg = Pozycja + 600
      Gosub Przelicz
      Bled = Wartosc
    Return
    
    Przyciski:
    If Sw_port <> 255 And Stan_portu = Sw_port Then
      Incr Licznik_sw
      If Licznik_sw = 10 Then
        Select Case Stan_portu
          Case 126:                                             'plus
            Licznik_sw = 5
            If Szybkosc > 1 Then Decr Szybkosc
          Case 125:                                             'minus
            Licznik_sw = 5
            If Szybkosc < 40 Then Incr Szybkosc
          Case 124:                                             'plus i minus
            Stopbit = Not Stopbit
            Syg_led = 1
          Case 111:                                             ' R
            Pozycja = 700
            Gosub Pozycja_do_rgb
          Case 119:                                             ' G
            Pozycja = 400
            Gosub Pozycja_do_rgb
          Case 123:                                             ' B
            Pozycja = 100
            Gosub Pozycja_do_rgb
          Case 110:                                             'plus R
            Licznik_sw = 8
            If Rled < 100 Then Incr Rled
          Case 109:                                             'minus R
            Licznik_sw = 8
            If Rled > 0 Then Decr Rled
          Case 118:                                             'plus G
            Licznik_sw = 8
            If Gled < 100 Then Incr Gled
          Case 117:                                             'minus G
            Licznik_sw = 8
            If Gled > 0 Then Decr Gled
          Case 122:                                             'plus B
            Licznik_sw = 8
            If Bled < 100 Then Incr Bled
          Case 121:                                             'minus B
            Licznik_sw = 8
            If Bled > 0 Then Decr Bled
          Case 103:                                             ' R G
            Rled = 100
            Gled = 100
            Bled = 0
          Case 115:                                             ' G B
            Rled = 0
            Gled = 100
            Bled = 100
          Case 107:                                             ' R B
            Rled = 100
            Gled = 0
            Bled = 100
          Case 99:                                              ' R G B
            Rled = 100
            Gled = 100
            Bled = 100
          Case 108:                                             ' plus minus R
            Animacja = 0
          Case 116:                                             ' plus minus G
            Animacja = 1
          Case 120:                                             ' plis minus B
            Animacja = 2
    
        End Select
    
      End If
    Else
      Stan_portu = Sw_port
      Licznik_sw = 4
    End If
    
    Return
    '********    Inne Etykiety Koniec  ************

    Nie mam pojęcia dlaczego nie działa, dodam też że po zmianie pinu wyjścia diody led [pinb.6 na pinc.1] dioda cały czasz mruga.
    Prosił bym o pomoc i najlepiej łopatologiczne wytłumaczenie zmian.
    Pozdrawiam.
  • #5
    otto25
    Level 15  
    Lfuse - 0xFF
    Hfuse - 0xC9
    i oczywiście kwarc 16MHz jest wpięty pod xtal0 i xtal1