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

Attiny 2313, BASCOM do C++

Tazmangw 18 Mar 2009 07:54 2177 6
  • #1
    Tazmangw
    Level 11  
    Witam,
    miałem na zaliczenie zrobić jakiś projekt z wykorzystaniem mikrokontrolera AVR, jako ze miałem tak mało czasu jak doświadczenia to zrobiłem działający projekt ze strony
    Link
    wszystko było ok, gdyby nie fakt ze wykładowca stwierdził żebym nie programował w BASCOM-ie tylko za pomocą C++ i taki właśnie postawił warunek na zaliczenie; bym ten sam kod napisał w c++.... No i się zaczęły schody bo BASCOM-a az tak dobrze nie znam, a raczej bardzo mało.

    Jeśli Ktoś z szanownego grona był by tak uprzejmy pomóc i przepisać ten kod do języka C++ to był bym bardzo wdzięczny. Mogę w zamian podarować wszystkie punkty jakie mam, jeśli ktoś był by zainteresowany; chociaż nie posiadam ich za wiele :/ Mogę również zapłacić za poświęcony czas i prace.

    Kod nie musi być wierną kopią do C++ kodu z Bascoma, ma tylko to samo robić w efekcie końcowym.
    Dla czytelności postanowiłem dodać kod z BASCOM-a:
    
    '************* 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  ************
    
  • #2
    nouki
    Level 25  
    To chyba zamienimy sie uczelniami u mnie miałem napisać w bascomie coś czego nigdy w nim nie pisałem bo na codzień C stosuje :) - wykładowca stwierdził że trzeba być uniwersalnym i tyle.
    Proponuje ci poszperać na elce to znajdziesz Rgb w C napisaną.
    A skoro piszesz że na zaliczenie ma być w C to pewnie uczyłeś się jakiś czas właśnie jego więc dasz rade napisać sam :)
    W końcu szkoła wymaga coś od Ciebie.
    Zacznij pisać a zawsze ktoś poprawi i nakieruje Cie. Na gotowca nie licz bo jedno pytanie od wykładowcy i wszystko staje się jasne :)
  • #3
    Tazmangw
    Level 11  
    No tak, rzecz w tym ze chcę opanować i jedno i drugie i poszerzać swoją wiedzę w programowaniu mikrokontrolerów, tylko gorzej sprawa wygląda gdy na poprawienie projektu zostaje półtora tygodnia, wtedy lepiej mieć wrodzoną zdolność szybkiego uczenia się :)
    Ale dzięki za podpowiedź!
  • #4
    janbernat
    Level 38  
    C++ w AVR to próba zmieszczenia Słońca we wnętrzu Ziemi.

    Dodano po 1 [minuty]:

    Można to zrobić w zwykłym C.

    Dodano po 1 [minuty]:

    Ale jak zmienisz warunki początkowe to niech Ci wydłuży termin.

    Dodano po 6 [minuty]:

    Ściągnij AVRStudio i WinAVR , zainstaluj W ODPOWIEDNIEJ
    kolejności i przetłumacz Bascoma na "pałę" może się uda.
    Nie będzie to piękny kod.
    Jak wytargujesz ze 4 tygodnie to może będzie znośny.
  • #5
    Tazmangw
    Level 11  
    Dzięki za podpowiedź.
    Jak zapewne większość wie, że na uczelni można spotkać "ciekawych" wykładowców; jedni za wszelką cenę szukają sposobu by pokazać swoją wyższość i starają się zgnoić "niższych" od siebie a inni chyba po prostu czerpią z tego przyjemność że kogoś uwalą mimo (a możne zwłaszcza) że poruszył słońce by dany przedmiot zaliczyć.
  • #6
    Dr.Vee
    VIP Meritorious for electroda.pl
    Trochę poza tematem, ale ... Ty raczej słońca nie poruszyłeś w celu zaliczenia przedmiotu.

    A może wykładowca właśnie to zauważył - skoro umiałeś napisać w bascomie, to pewnie nie będziesz miał problemu z napisaniem tego samego programu w C ;)

    Na serio - zacznij od instalacji kompilatora i środowiska, skompiluj najprostszy program. Translacja bascom -> C jest prawie mechaniczna z kosmetycznymi zmianami, więc nie będzie Cię kosztowała dużo wysiłku.

    Pozdrawiam,
    Dr.Vee
  • #7
    Tazmangw
    Level 11  
    Raczej na pewno nie poruszyłem ;) A nawet się za mocno nie przyłożyłem do tego przedmiotu, bo sposób prowadzenia zajęć przez tego wykładowcę wręcz zrażał mnie do zagłębiania się w temat elektroniki... więc masz całkowitą rację i tego nie ukrywam; do tego doszła dziekanka ale to już nie istotne. Umieściłem post z prośbą o pomoc bo jest tu dużo mądrych głów które na temat elektroniki mają dużo większą wiedzę i doświadczenie niż ja a chciał bym mimo wszystko przegryźć ten orzech i mieć to z głowy; a że elektronika mnie interesuje to mam zamiar poszerzać tą wiedzę we własnym zakresie a ni jeżeli pod przymusem i presją czasu. A kod BASCOM-a nie był pisany przeze mnie, zresztą wyżej podałem link do autora kodu. No i na zakończenie zaznaczę że moje studia nie są elektroniczne a to jest tylko jeden przedmiot który mimo iż mógł by być interesujący to nie był z w/w powodu.
    A tak na marginesie to czy zawsze wszyscy z was sumiennie wypełniali obowiązki szkolne? ;)

    Dzięki za podpowiedź na pewno się przyda i zapewne będę próbował tak zrobić.

    Pozdrawiam