Elektroda.pl
Elektroda.pl
X
AM TechnologiesAM Technologies
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

ATtiny13 i ATmega8515 nie kompatybilne ??

06 Wrz 2006 11:48 5459 36
  • Poziom 29  
    Witam.

    Napisalem sobie program do sciemniacza do auta. Testy robilem na ATmega8515 bo na takim zrobilem sobie kiedys plytke testowa. Wszystko OK. Program kompiluje sie, laduje dziala jak chce, plik wynikowy ma troche ponad 0,5kB wiec OK. Kupuje ATtiny13, zmieniam plik bibliorteki, nazwy portow i kompiluje i wysypuje mi sie szereg bledow :( Co jest grane ??

    Czy one sa niekompatybilne??
    Pierwszy blad to zaznacza mi wszystkie zmienne (Czyli A, B, I) i wypisyje ze poza pamiecia SRAM, pozniej czepia sie do timera i konfiguracji PWM, i na koncu ze brakuje IF i END IF w lini 0 :roll:

    Co o tym sadzicie ??

    Code:
    $regfile = "ATtiny13.DAT"
    
    $crystal = 9600000

    Config Pinb.1 = Output
    Config Pinb.3 = Input
    Config Pinb.4 = Input
    Reset Portb.3
    Set Portb.4

    Config Timer0 = Pwm , Pwm = 8 , Compare B Pwm = Clear Down , Compare A Pwm = Disconnect , Prescale = 64

    Dim I As Byte
    Dim A As Byte
    Dim B As Byte

    Drzwi Alias Pinb.4
    Stacyjka Alias Pinb.3

    Declare Sub Zgas
    Declare Sub Czekaj

    Pwm0b = 0
    I = 0

    Do

    If Stacyjka = 0 Then
      If Drzwi = 0 Then
        If I < 255 Then
         For A = 0 To 254
         Incr I
         Pwm0b = I
         Next A
        End If
        I = 255
      End If

     Else
       If Drzwi = 0 Then
        Pwm0b = 255
       End If

       If Drzwi = 1 Then
        Pwm0b = 0
       End If

    End If


    If Drzwi = 1 Then
      If I > 0 Then
       Czekaj
        If I > 0 Then
         For A = 254 To 0 Step -1
         Decr I
         Pwm0b = I
         Next A
        End If
      End If
      I = 0
    End If

    Loop
    End

    Sub Zgas
     I = 0
     Pwm0b = I
    End Sub

    Sub Czekaj
     For B = 0 To 150
       If Stacyjka = 1 Then
       Zgas
       B = 150
       End If
     Waitms 100
     Next B
    End Sub
  • AM TechnologiesAM Technologies
  • Poziom 33  
    Sądzę, że powinieneś ściągnąc manuale do tych procków i przeczytać, a nie zadawać głupich pytań.

    To tak jakbyś wziął silnik z Kamaza i wstawił do Wołgi (w końcu to też ruskie auto) i się dziwił, że się nie mieści...
    BASCOM ...
  • Poziom 29  
    Mam posciagane manuale i przeczytalem. SRAMu ATtiny ma 64B Flash ma 1kB.

    ATtiny ma 1 Timer 8-bitowy z 2 kanalami PWM wiec tez powinno byc OK.

    Wiec jak zrobic zeby sie zmiecilo i nie wywalal mi errorow ??
  • Poziom 33  
    A jaki stos Ci BASCOM produkuje?
  • Pomocny post
    Poziom 17  
    A możesz napisać, co to za błędy. Prawdopodobnie dotyczą timera. Timer0 8515 i timer0 attiny13 to nie zupełnie to samo i stąd te błędy :cry: .
    Czasami też używam bascoma, ale w kwestii poleceń typu "config", to w ogóle mu nie wierzę i po prostu trzeba wziąć do ręki dokumentację procka i samemu odpowiednie rejestry poustawiać :D
  • AM TechnologiesAM Technologies
  • Poziom 29  
    przemek20 napisał:
    Ma 128 bajtów sramu a nie 64.


    No stary slepy nie jestem :roll: Ma 64B SRAM, 64B EEPROM i 1kB Flash

    A bledy to:
    Err nr. 86 w lini configuracji Timera
    Err nr. 22 w lini konfiguracji zmiennej A, B, I jako Byte
    Err nr. 46 w lini gdzie wpisuje do I=0
    Err nr. 31 w liniach gdzie sa operacje na zmiennych A. B, I
    Err nr. 242 w lini gdzie jest Pwm0b=I
    I standardowo ze brakuje IF a pozniej END If w lini 0

    I nie sadze zeby program sie nie zmiescil. To sa tylko 3 moje zmienne, obluga 2 portow jako wejscie i PWM z Timer0

    I jak w BASCOM`ie sprawdzic stos bo nie kozystam z zadnych jego bajerow typu symulator, terminal itp.
  • Poziom 33  
    A tego to ja nie wiem, jak sprawdzić, może generuje jakiś plik z mapą pamięci, raportem itp.? Albo może ma gdzieś w opcjach możliowść ustawienia?
  • Poziom 34  
    UC 8 nóżkowe mają swoje prawa. Poczytaj w helpie o dyrektywie $TINY i o sposobie deklaracj zmiennych (np. Dim X As Iram Byte). Jak to nie pomoże to będziemy się głowić dalej. Wg help'a niektóre instrukcje mogą na tych procesorach nie działać.
  • Poziom 29  
    Generuje plik z bledami. Oto one w calosci??
    Code:
    Error : 86    Line :   10    Invalid parameter for CONFIG parameter or value [8]  , in File : C:\DOCUMENTS AND SETTINGS\DAREK\PULPIT\INNE\BASCOM\SCIEMNIACZ.BAS
    
    Error : 22    Line :   12    Out of SRAM space  , in File : C:\DOCUMENTS AND SETTINGS\DAREK\PULPIT\INNE\BASCOM\SCIEMNIACZ.BAS
    Error : 22    Line :   13    Out of SRAM space  , in File : C:\DOCUMENTS AND SETTINGS\DAREK\PULPIT\INNE\BASCOM\SCIEMNIACZ.BAS
    Error : 22    Line :   14    Out of SRAM space  , in File : C:\DOCUMENTS AND SETTINGS\DAREK\PULPIT\INNE\BASCOM\SCIEMNIACZ.BAS
    Error : 46    Line :   23    Assignment error [I: 0   0: 112]  , in File : C:\DOCUMENTS AND SETTINGS\DAREK\PULPIT\INNE\BASCOM\SCIEMNIACZ.BAS
    Error : 31    Line :   29    Invalid datatype  , in File : C:\DOCUMENTS AND SETTINGS\DAREK\PULPIT\INNE\BASCOM\SCIEMNIACZ.BAS
    Error : 46    Line :   30    Assignment error [A: 0   0: 112]  , in File : C:\DOCUMENTS AND SETTINGS\DAREK\PULPIT\INNE\BASCOM\SCIEMNIACZ.BAS
    Error : 31    Line :   30    Invalid datatype  , in File : C:\DOCUMENTS AND SETTINGS\DAREK\PULPIT\INNE\BASCOM\SCIEMNIACZ.BAS
    Error : 31    Line :   31    Invalid datatype [ 0]  , in File : C:\DOCUMENTS AND SETTINGS\DAREK\PULPIT\INNE\BASCOM\SCIEMNIACZ.BAS
    Error : 15    Line :   31    Wrong datatype [I]  , in File : C:\DOCUMENTS AND SETTINGS\DAREK\PULPIT\INNE\BASCOM\SCIEMNIACZ.BAS
    Error : 242   Line :   32    Source variable does not match the target variable [ 0]  , in File : C:\DOCUMENTS AND SETTINGS\DAREK\PULPIT\INNE\BASCOM\SCIEMNIACZ.BAS
    Error : 7     Line :   0     IF THEN expected [ 32]  , in File :
    Error : 123   Line :   0     END IF expected  , in File :


    I nic wiecej nie znalazlem :|

    Dodano po 6 [minuty]:

    Oki $tiny rozwialo sprawe ze zmiennymi.

    Pozostaly takie dwa dziwne bledy :/
    Code:
    Error : 86    Line :   11    Invalid parameter for CONFIG parameter or value [8]
    
    Error : 0     Line :   0      [LCD not possible with TINY chip]
  • Poziom 39  
    fantasta napisał:
    Oki $tiny rozwialo sprawe ze zmiennymi.

    Rozwiało :?: , zapewne Twoją czuprynę :D
    Po pierwsze , coś kręcisz , bo nawet takie cuś nie da się skompilować dla ATMega8515 :!:
    Code:

    $regfile = "m8515.DAT"
    Config Timer0 = Pwm , Pwm = 8 , Compareb Pwm = Clear Down , Comparea Pwm = Disconnect , Prescale = 64

    A nie da się również na wiele innych proców , w których rozdzielczość licznika0 = 8 bitów , więc Pwm = 8 - nie ma sensu ;)
    Po wtóre , zanim czegoś zaczniesz używać , to "przeleć" (choćby pobieżnie) instrukcję obsługi.Dotyczy to zarówno Bascoma , jak i młota pneumatycznego :D
    I na koniec ...
    Code:

    $regfile = "ATtiny13.DAT"
    $crystal = 9600000
    'poeksperymentuj z 3 poniższymi wartościami
    $hwstack = 20
    $swstack = 10
    $framesize = 10

    Config Timer0 = Pwm , Compareb Pwm = Clear Down , Comparea Pwm = Disconnect , Prescale = 64

    '...


    Piotrek
  • Poziom 17  
    Nie byłbym taki szczęśliwy z tym $tiny - też kiedyć coś robiłem na attiny15 i dopisanie $tiny pomogło tylko o tyle, że nie wyrzucało błędów podczas kompilacji. Na uC i tak program nie działał :cry: . Poza tym $tiny nie powinno być potrzebne, bo jest ono dla uC bez sramu, a tiny13 sram ma. Zobacz na stronie producenta bascoma - swego czasu o $tiny było napisane, że to w fazie prób i póki co nie działa. Może w ogóle z tego zrezygnowali, bo już teraz nawet 8-mio nóżkowce sram mają.
    Zresztą w obydwu przypadkach kompilacji i tak pozostaje problem z timerem.
    Poza tym te dwa suby to lepiej zawrzyj w pętli głównej. Każdy sub zużwa pamięć sram a ty w dodatku masz te suby zagnieżdźone jeden w drugim.
    Po południu będę miał dostęp do komputera z bacomem, to wrzucę ten twój program i postaram ci się pomóc konkretniej.
    Pozdrawiam
  • Poziom 29  
    Zapewniam ci ze watpliwosci bo czupryny nie mam ;) A programik dzialal tylko ze na medze kozystalem z Timer1 wiec dlatego Pwm=8.

    Myslalem ze to nie popsuje nic w Timer0 w ATtiny. I Wszystkie instrukcje z ktorych kozystam w tym programie przelecialem bardziej niz "pobieznie" Na pocztaku pisania.

    Wywalilem te Pwm=8 dokladalem te 3 lini i zmienialem wartosci i ciagle zostale blad z LCD. Nie mam pojecia czemu. Wogole jakis dziwny blad bo ni jak go zlokalizowac :|

    Code:

    Error : 0     Line :   0      [LCD not possible with TINY chip]
  • Poziom 39  
    To naprawdę zastanawiające :( Poza tym , w kodzie z Twojego 1-go postu , o LCD ani widu , ani słychu :(
    Więc jak to jest , z tym nieszczęsnym LCD :?:
    Piotrek
    PS
    Po dodaniu CLS , też nie ma błędów.
    A Bascom , w której wersji :?:
  • VIP Zasłużony dla elektroda
    Najprawdopodobniej błąd twki w bascomie, wywal $tiny, a problem zniknie.
  • Poziom 29  
    Oki wywalilem $tiny.
    Zostawilem deklaracje jako Iram Byte i program sie skompilowal. Zaladowalem do procka, procek do ukladu i nie dziala. Po podaniu 0 na Portb.4 zarowka sie natychmiastowo zapala i pali sie az jej nie zgasze. Zgasic zarowke moge podajac jedynke na port ospowiadajacy stacyjce.

    PWM wogole nie chodzi. Podpielem oscyloskop i na wyjsciu gdzie powinien byc PWM jest staly sygnal 2V. MOSFETA w min wysterowuje ale zarowka sie poprostu caly czas swieci. Cos z tymi zmiennymi poprostu chyba jest nie tak.

    Program teraz wyglada tak:
    Code:
    $regfile = "ATtiny13.DAT"
    
    $crystal = 9600000

    Config Pinb.1 = Output
    Config Pinb.3 = Input
    Config Pinb.4 = Input
    Reset Portb.3
    Set Portb.4

    Config Timer0 = Pwm , Compare B Pwm = Clear Down , Compare A Pwm = Disconnect , Prescale = 64

    Dim I As Iram Byte
    Dim A As Iram Byte
    Dim B As Iram Byte

    Drzwi Alias Pinb.4
    Stacyjka Alias Pinb.3

    Declare Sub Zgas
    Declare Sub Czekaj

    Pwm0b = 0
    I = 0

    Do

    If Stacyjka = 0 Then
      If Drzwi = 0 Then
        If I < 255 Then
         For A = 0 To 254
         Incr I
         Pwm0b = I
         Next A
        End If
        I = 255
      End If

     Else
       If Drzwi = 0 Then
        Pwm0b = 255
       End If

       If Drzwi = 1 Then
        Pwm0b = 0
       End If

    End If


    If Drzwi = 1 Then
      If I > 0 Then
       Czekaj
        If I > 0 Then
         For A = 254 To 0 Step -1
         Decr I
         Pwm0b = I
         Next A
        End If
      End If
      I = 0
    End If

    Loop
    End

    Sub Zgas
     I = 0
     Pwm0b = I
    End Sub

    Sub Czekaj
     For B = 0 To 150
       If Stacyjka = 1 Then
       Zgas
       B = 150
       End If
     Waitms 100
     Next B
    End Sub
  • Poziom 17  
    Zamiast tego całego config timer0 itd. wpisz sobie:
    TCCR0A=&b00100001
    TCCR0B=&b00000011
    i póżniej wszędzie gdzie masz pwm0b wpisz OCR0B.
    powyższego nie sprawdzałem - na żywca z dokumentacji. Za ok. 2h sprawdzę to coś ci napiszę :D

    Dodano po 2 [godziny] 34 [minuty]:

    Wygląda na to, że ten kod zaczął ci działać :D . To, że żarówka ci od razu się zapala i gaśnie to nic dziwnego. Jeżeli ma się powoli zapalać i wygaszać to daj jakieś opóźnienia w pętlach, gdzie regulujesz PWM, bo tak to procesor zrobi to tak szybko, że nawet włókno żarówki nie zdąży wystygnąć :D .
  • Poziom 29  
    Nie sadze zeby robil to tak szybko. Na 8515 przy kwarcu 4Mhz ladowanie tych 255 w petli do Pwm0b trwalo jakies 5sek. W tym tez zmienilem ustawienia w fusach na 4,6Mhz i bez roznicy.

    A po drugie gdyby dzialal to po 15 sek by ja zgasil a tak sie nie dzieje.
  • Poziom 17  
    Wrzuciłem to do symulatora. Ta pętla co zapala ci światło po otwarciu drzwi (drzwi na 1, stacyjka na 0) trwa ok.0.4ms. Przy 4.8MHz ok. 0.8ms. Nie sądzę, że zauważysz różnicę :D .
    zamień
    Code:

    If Stacyjka = 0 Then
      If Drzwi = 0 Then
        If I < 255 Then
         For A = 0 To 254
         Incr I
         Pwm0b = I
         Next A
        End If
        I = 255
      End If

    na
    Code:

    If Stacyjka = 0 Then
      If Drzwi = 0 Then
        If I < 255 Then
         For A = 0 To 254
         Incr I
         Pwm0b = I
         waitms 20
         Next A
        End If
        I = 255
      End If

    wtedy pętla potrwa ok. 5s i coś da się zobaczyć :D .
    Z tymi 15s faktycznie masz rację. Powinno się zgasić, ale te 15s liczy się u ciebie dopiero jak te drzwi zamkniesz. Rozumiem, że tak zrobiłeś. Oczywiście zgaśnie też od razu, bo w tej pętli gaszącej też nie ma żadnego opóźnienia :D .
    uC są szybsze niż myślisz :D
  • Poziom 39  
    zbig_wwl napisał:
    ...wtedy pętla potrwa ok. 5s i coś da się zobaczyć :D .
    ...

    Dobrze , że zbig_wwl zwrócił uwagę na pętle.Muszę z przykrością stwierdzić , że jest w tym programie tzw. wieczna pętla , czyli wykonująca się do u.... śmierci mikroprocka :D
    Ta pętla wygląda tak:
    Code:

    '...
         For A = 254 To 0 Step -1
         Decr I
         Pwm0b = I
         Next A
    '...

    Zeby zmienić ten stan rzeczy , należy:
    a)zmienić typ zmiennej A na Integer , lub zastosować Do Loop Until, lub... cos co "reaguje" na X=Y , a nie X<Y.W skrócie to wygląda tak , że A w tej pętli jest sprawdzane na okoliczność A<0 , a ponieważ A jest typu BYTE , NIGDY nie będzie < 0 więc uC lata w kółko ja wściekły i doprowadza tym programistę do szewskiej pasji :D
    Uff... koniec ;)

    Piotrek
  • Poziom 17  
    Ta pętla jednak powinna się skończyć. Najpierw następuje porównanie a potem dekrementacja. Jeżeli jest 0 to po prostu w tym momencie program już do pętli nie wchodzi tylko wykonywane są dalsze instrukcje. Tyle symulator bascoma. Może wrzucę to do avr studio to coś więcej napiszę.
    A masz zumek może jakąś ideę, dlaczego jak pisze fantasta pętla do 255 trwała mu 5s z 4MHz kwarcem :?:
  • Poziom 39  
    zbig_wwl napisał:
    Ta pętla jednak powinna się skończyć.

    Przez roztargnienie zapomniałem dodać , że dzieje się jak opisałem dla
    Dim I As Iram Byte , a dla Dim I As Byte działa OK , czyli wynocha z Iram , a resztę zostawić jak jest ;)

    zbig_wwl napisał:

    A masz zumek może jakąś ideę, dlaczego jak pisze fantasta pętla do 255 trwała mu 5s z 4MHz kwarcem :?:

    W/g moich "obliczeń" ta pętla zajmuje ~3600 cykli , czyli musiał by być taktowany ... 720 Hz :D

    Piotrek
  • Poziom 17  
    Właśnie wrzuciłem do avr studio prostą, pustą pętlę for i rzeczywiście instrukcje które tam kompilator bascoma nawstawiał to przyprawiają o zawrót głowy. Nie ma co się dziwić, że później taki wielki kod powstaje. I rzeczywiście pętla się nie kończy, ani taka z dekrementacją ani taka z inkrementacją, czyli spokojnie można sobie odpuścić te iram'y.
    Bascom jest łatwy do pisania, ale uruchomić w nim program to już zajęcie dla profesjonalisty :D . Przy uruchamianiu to już dwa kroki żeby się asemblera nauczyć i w takich prostych zadania sterowania (w tych bardziej skomplikowanych też :D ) używać właśnie jego. Ten kod do takiego ściemniacza :D to powinien zająć ze 100 bajtów max, a bascom prawie 500 produkuje :D


    Wygląda na to, że stosując iram rzeczywiście kompilator przestaje mieszać ze sramem i używa tylko rejestrów, ale ofsety do instrukcji skoków to oblicza tak, jakby tam te LDS i STS były :D . Nieuchronnie prowadzi to program w krzaki. Wniosek jeden - nie używać iram, a przynajmniej nie bez dyrektywy $tiny. A co się dzieje z $tiny to wiemy z wcześniejszych postów :D
  • Poziom 29  
    No ale bez Iram wysypuje sie te milion bledow czyli stoimy w poscie pierwszym tego tematu :(

    I nie moge zrozumiec czemu na medze przy 4Mhz ladnie mi sie sciemnialo i rozjasnialo bez zadnych opoznien :roll:

    To jak zrobic z tymi Iram?? Moze zamiast sprawdzania czy A ma o sprawdzac czy A ma 1 ?? No i nie mozna zmienic na Interger bo Iram tylko na Byte dziala :/
  • Poziom 39  
    fantasta napisał:
    No ale bez Iram wysypuje sie te milion bledow czyli stoimy w poscie pierwszym tego tematu :(

    A sprawdziłeś że sie sypie :?: Mnie się nie sypie po $Hwstack ... itd.

    Piotrek

    Napisz wreszcie jaką masz wersje Bascoma :|
  • Poziom 29  
    Wersje mam 1.11.8.3.

    I tak sypie sie nawet gdy wstawie te dyrektywy o ktorych nic nie moge znalesc w helpie ;)

    A wez poprostu sprawdz ten caly program. Wyzej podalem akutualny kod. Mi sie sypie niestety.
  • Poziom 29  
    Dobra ten twoj dziala. Nie sprawdzalem z tymi dyrektywami jako Byte poprostu ;)

    Jutro zaladuje prog do procka i zobaczymy jak dziala. I dodam jeszcze te przystanki w petli.

    I co to sa za dyrektywy bo w polskim helpie ich nie moge znalesc ??
  • Poziom 39  
    Czy to trzeba wszystko tak łopatologicznie :(
    Wykorzystaj opcję Szukaj: pod kątem hwstack , a znajdziesz temat autorstwa Roman Szemik.Przeczytaj i... tyle :)

    Piotrek
  • Poziom 29  
    Wiec tak.

    Program zumka czyli moj z dodanymi dyrektywami ;) Dziala. Przy dadaniu nawet waitms 1 strasznie zarowka miga a gdy dam wieszy czas miganie staje sie mniejsze ale za to wydluza sie czas zapalania i gaszenie. Musze chyba pokombinowac z czestotliwoscia PWM i moze sie uda.

    Zbyszek twoj program niestety nie dziala dobrze. Zarowka sie zapala i nie gasnie po 15 sek. Tylko gdy podam sygnal na stacyjke.

    Dzieki panowie za wszelka pomoc ;)