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

Kompilacja programu AVR w asemblerze - błędy w AVR Studio 4 i WAVRASM

Marko121 08 Maj 2005 22:48 5689 29
  • #1 1474496
    Marko121
    Poziom 17  
    Posty: 394
    Pomógł: 10
    Ocena: 120
    Witam
    Chciałbym wykonać takie coś ze strony: http://www.myplace.nu/avr/minidds/index.htm
    Mój problem polega na tym że nie mogę poradzić sobie z kompilacją tego programu napisanego w asemblerze ,aby załadować go do procka. Użyłem w tym celu avrstudio 4 oraz wavrasm obydwa programy komunikowały że w programie jest 5 błędów .Dla mnie asembler to jeszcze wielką zagadką wiec zwracam się z prośbą o pomoc do fachowców ,może ktoś życzliwy pomoże mi poprawić ten program ,a może ja nie używam właściwych narzędzi?

    Proszę o jakiś sugestie

    Pozdrawiam marko121
  • #2 1475147
    ora
    Poziom 13  
    Posty: 56
    Pomógł: 8
    Ocena: 1
    napisz może jakiego asemblera używasz bo do obsługi procków jest chyba asembler 8088 czy jakośtak a zwykły Pecetowy ma jeszcze inne komendy
  • #3 1478201
    LordBlick
    VIP Zasłużony dla elektroda
    Posty: 5438
    Pomógł: 549
    Ocena: 69
    Pytanie podstawowe, do jakiego procesorka chcesz załadowac program ? W oryginale jest AT90S2313. Myślę, że szybszą pomoć uzyskałbyś, prosząc moderatorów o przeniesienie do działu "Mikrokontrolery"
  • #4 1478264
    Elektrooonik
    Poziom 29  
    Posty: 1212
    Pomógł: 127
    Ocena: 83
    Dziwi mnie troszke ze Jesper nie wrzucił gotowego hexa oprócz kodu źródłowego, ułatwił by życie wszystkim którzy chcieli by zbudować to urządzenie :)
  • #5 1478275
    Marko121
    Poziom 17  
    Posty: 394
    Pomógł: 10
    Ocena: 120
    Witam
    Masz racje Light'I chyba umieściłem ten post nie tam gdzie trzeba i przed chwilą właśnie poprosiłem o przeniesienie .

    Wracając do tematu to chciałbym ten program umieścić w AT90S2313 tak jak jest oryginalnie (ewentualnie w atmega8 bo to chyba unowocześnienie 2313,chyba że się mylę)
    Czy możesz mi jakoś pomóż w kompilacji?
    Pozdrawiam marko121
  • Pomocny post
    #6 1478311
    LordBlick
    VIP Zasłużony dla elektroda
    Posty: 5438
    Pomógł: 549
    Ocena: 69
    Unowocześnienie AT90S2313 brzmi : ATtiny2313.... ;)
    No to OK, kody przerobione pod modłę AVRStudio + gotowy HEX - na AT90S2313, ATtiny2313 i ATmega8515. Licencja GNU zachowana - mamy binaria i źródła... ;)
    Some other requests ? ;)
    P.S.
    Cytat:
    ; Code is written for use with AVR-GCC in assembler mode
    ; flag: -x assembler-with-cpp
    - oryginalny kod jest pod avrgcc... ;)
    Pozdrawiam, Daniel
    -----------------------
    05-07-2005 - Update : dodałem kod w wersji modułowej, uniwersalnej, zawierający warunkową kompilację w pliku Main.asm - dobry przykład na wyciśnięcie co nieco z AVRasm2... ;)
    Załączniki:
    • MiniDDS_uni.zip (7.7 KB) Musisz być zalogowany, aby pobrać ten załącznik.
    • MiniDDS-AT90S2313.zip (8.92 KB) Musisz być zalogowany, aby pobrać ten załącznik.
    • MiniDDS-ATtiny2313.zip (9.05 KB) Musisz być zalogowany, aby pobrać ten załącznik.
    • MiniDDS-ATmega8515.zip (9.06 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • #7 1478515
    Marko121
    Poziom 17  
    Posty: 394
    Pomógł: 10
    Ocena: 120
    Witam
    Suuuper :D bardzo ci dziękuje Light'I dla ciebie to pewnie pestka ,a mnie bardzo pomogłeś. Bardzo miło że są jeszcze ludzie , którzy chcą nieść pomoc innym ,a ty z pewnością do mich należysz.

    Jeszcze raz dziękuję wszystkim za zainteresowanie tematem , szybką reakcję i oczywiście za rozwiązanie mojego problemu

    Pozdrawiam Marek
  • #8 1478561
    prokopcio
    Poziom 29  
    Posty: 2027
    Pomógł: 39
    Ocena: 143
    Witam... No super sprawa, daj znać jak zrobisz, czy wszystko jest ok...

    Pozdrawiam

    Dodano po 1 [minuty]:

    ps. Co do Light'I dołączam się do wyrazów uznania:

    Dołączył: 31 Sie 2004
    Posty: 1537
    Pomógł osobom: 129
  • #9 1515757
    Marko121
    Poziom 17  
    Posty: 394
    Pomógł: 10
    Ocena: 120
    Witam ponownie
    Wykonałem płytkę poskładałem wszystko załadowałem hexa do 90s2313 i układ nie działa :( :( :cry: .Układ jest wykonany prawidłowo wg. schematu
    nie wstawiłem tam tylko MAX603 bo według mnie jest on tan tylko po to aby oszczędzać baterie i podaje zasilanie dopiero wtedy gdy układ jest podpięty do kompa. Połączyłem tylko nogi w podstawce(odmax603) 1 i 8 i podaje tam 5V z zasilacza zewnętrznego , zamiast max202 dałem max232 ale to jest to samo wg. elfy max 202 jest unowocześnieniem max232 więc chyba nie powinno to przeszkadzać

    Na wyjściu generatorka nie ma przebiegu .(na portcie PB stale 5V bez zmian ,bez przebiegu)
    W programie sterującym „DDSControl” po wciśnięciu przycisku „set” w górnym polu „frequency” powinna pojawić się zadana w dolnym polu „new Freq” wartość ,gdy układ nie jest podłączony do komputera albo jest brak komunikacji po rs to w polu „frequency” jest cały czas „static” natomiast w moim przypadku komunikacja jakaś tam chyba jest bo po zadaniu „new Freq” u góry pojawia się wartośc ale jest ona całkowicie inna niż została zadana i przyciski „<< >> < >” coś tam zmieniają ale nie tak jak trzeba w dodatku nie za każdym razem po zadaniu nowej częstotliwości wpływam na zmianie górnej wartości , a czasem nie zmienia się nic, więc moim zdaniem coś chyba jest nie tak z tą komunikacją ale nie mam pojęcia co to może być.
    Próbowałem zasymulować program na procka (bo może tam coś jest nie tak) w avr studio 4 ale jakoś mam kłopoty z oceną czy program jest ok. ponieważ jak już wspominałem mam kłopoty z asemblerem a tu trzeba jeszcze symulować uarta – nie dam rady -może ktoś bardziej doświadczony zechciał by przesymulować ten program i powiedzieć czy wszystko jest ok.
    Podłączenie z komputerem wykonałem kablem 1 do 1 czyli :

    Komp generator
    2 - 2
    3 - 3
    4 - 4(włącza zasilanie ale u mnie jest na stale 5V z zasil. zewn. a więc 4 wisi w powietrzu )
    5 - 5
    Działanie programu i ukladu sprawdzałem na 3 komputerach win2000 i win 98 –to samo czyli źle
    pomyślałem może kwarc? ale włożyłem procka do płytki uruchomieniowej od bascoma (inny kwarc11.052 ,inny max232) pozworkowałem wg schematu i to samo- źle .

    proszę o jakieś ewentualne podpowiedzi co jeszcze sprawdzić ,co może być nie tak i jakie wyniki symulacji programu.
    Za wszelką pomoc z góry dziękuję

    pozdrawiam Marek
  • #10 1516067
    LordBlick
    VIP Zasłużony dla elektroda
    Posty: 5438
    Pomógł: 549
    Ocena: 69
    Program jest na kwarc 11.0592MHz. Czy testowałeś na programie typu terminal ? Układ nawet bez podłączenia do komputera powinien po włączeniu generować sinusa 1kHz...
  • #11 1516636
    Marko121
    Poziom 17  
    Posty: 394
    Pomógł: 10
    Ocena: 120
    Cytat:
    Program jest na kwarc 11.0592MHz.


    czy nie powinno to być zadeklarowane gdzieś w programie?

    Cytat:
    Czy testowałeś na programie typu terminal ?


    nie za bardzo wiem jak? może mi coś podpowiesz?
    nie wiem jak to zrobić żeby terminal podglądał i wyświetlał to co się dzieje na nim podczas komunikacji procesor -komp


    Cytat:
    Układ nawet bez podłączenia do komputera powinien po włączeniu generować sinusa 1kHz...


    hmmm.. nie ma nic na wyjściu tzn nie ma żadnego przebiegu na oscyloskopie jest tylko stałe ok 2,75V może ten at90s2313 się uszkodził? jutro sprawdzę na atmega8 bo taki mam
  • #12 1516713
    rdt
    Poziom 25  
    Posty: 789
    Pomógł: 29
    Ocena: 39
    mam pytanko
    at90s2313 jest maxymalnie taktowany do 10 Mhz
    czy 11.059 mu nie zaszkodzi ?
  • #13 1516803
    LordBlick
    VIP Zasłużony dla elektroda
    Posty: 5438
    Pomógł: 549
    Ocena: 69
    W asemblerze nie istnieje coś takiego jak "deklaracja". Albo używasz jakiegoś rejestru i jakiś wartości, albo nie. Ale w komentarzach kodu źródłowego jest co trzeba zaznaczone. Osobiście dla wygody i elastyczności kodu przy zmianach procesorka, zegara itp. stosuję definicje stałych i kompilator mi przelicza, co potrzeba, ale nie jest to konieczne. Program terminala :
    http://www.elester-pkp.com.pl/vftppl.php?ftp=41&ftpaction=download
    Prędkośc jest 115200bps 8bit 1 bit stopu bez kontroli parzystości.
    Co do sprawności układu, jakie jest napięcie na XTAL2 ? Najlichsze mierniki pokażą połowę napięcia zasilania, znakiem czego zegar tyka. Jeśli jest inaczej, to do wymiany. Na ATmega8 trzeba poustawiać odpowiednio fusebity, aby program działał, czyli najpierw je zczytujemy i wszystki CKSEL(0-3) mają być odznaczone, a CKOPT zaznaczony. Nic innego nie ruszać bez obeznania się z notą katalogową tam jest opisane co jest do czego.
    Co do nominalnej prędkości zegara, to producent gwarantuje te 10MHz. Jak mu dać te 11% z kawałkiem więcej, też pewnie ruszy... ;) Nie powinno być z tym problemu, PIC16F84A-04 z prędkością nominalną 4MHz może iść na 12MHz, tak przynajmniej twierdzi autor picpong-a... ;)
  • #14 1519113
    Marko121
    Poziom 17  
    Posty: 394
    Pomógł: 10
    Ocena: 120
    Witam
    :cry: :cry: :cry:
    nie ukrywam że jest mi ciężko i coraz ciężej na duszy powiem tak nie mogę strawić tego asemblera (a człowiek najbardziej szuka problemu w tym czego nie zna lub nie rozumie ) ale nauczenie się go w ciągu kilku dni to raczej nie możliwe.
    Powiem szczerze ,pomyślałem tak: - jest schemat ,jest program ,jest kod -myślę pestka
    więc podjąłem się wykonania tego projektu ,ale że nic nie przychodzi w życiu łatwo o czym się niejednokrotnie przekonałem i tym razem też schodki .
    Panowie proszę pomóżcie bo od 5 dni nic innego oprócz tego co muszę nie robię tylko zajmuje się tym prościutkim projektem i już prawie nie śpię bo czas mnie goni . Wybaczcie ale przeżywam kryzys z tym projektem już dawno nic nie dało mi tak popalić
    -dobra to tyle użalania się nad sobą powracam do tematu

    Cytat:
    Co do sprawności układu, jakie jest napięcie na XTAL2 ? Najlichsze mierniki pokażą połowę napięcia zasilania, znakiem czego zegar tyka. Jeśli jest inaczej, to do wymiany.

    to akurat sprawdziłem na samym początku przebieg na xtal2 jest na oscyloskopie i na mierniku ok. 2,37V

    pozwólcie że powrócę jeszcze do tego :
    Cytat:
    Układ nawet bez podłączenia do komputera powinien po włączeniu generować sinusa 1kHz...

    czy jesteś tego pewny Light'­I ?
    podłączyłem dzisiaj ten układ i włączyłem terminala ustawiłem jak mi podałeś
    Cytat:
    Prędkość jest 115200bps 8bit 1 bit stopu bez kontroli parzystości.

    włączyłem echo i wciskałem po kolei klawisze (bo oczywiście nie wiem co mam napisać żeby zasymulować wciśnięcie np: "<" albo ">" albo jeszcze coś innego z programu sterującego "ddscontrol" ) klawiatury obserwując co się dzieje na wyjściu podpiętego do oscyloskopu ukladu .
    I co?
    O dziwo po wciśnięciu klawisza numerycznego 4 na oscyloskopie pojawiła się sinusoida po wciśnięciu klawisza 2 już jej nie było - znowu 4 i znowu jest na wyjściu
    Po odłączeniu układu od kompa i wyłączeniu zasilania i po ponownym podłączeniu -sinusoidy nie ma , po powtórnej komunikacji z terminalem wciskam-4 i znowu jest , a więc

    układ według mnie po podłączeniu tylko do zasilania nie powinien nic generować dopiero po ustawieniu coś z kompa powinna zacząć się generacja przebiegów o tym min. świadczy zastosowanie max 603 ,który włącza zasilanie dopiero po uruchomieniu programu sterującego „ddscontrol „ bo wtedy dopiero na linii nr4 rs232 (DTR) pojawia się stan wysoki i co za tym idzie stan ten uruchamia przełącznik w max 603 ,który z kolei podaje zasilanie na procka (to są moje przemyślenia jeżeli się myle proszę o sprostowanie)

    Więc wniosek jest taki :
    1)procesor jest sprawny (zresztą wcześniej wgrałem inny program i działał)
    2)program hex. wgrałem poprawnie (co moim zdaniem nie znaczy że działa poprawnie)
    3)droga rs232 od kompa do procka jest ok. o czym świądczy komunikacja z terminalem(coś żyje)
    pytanie podstawowe:
    co może być w takim przypadku nie tak ?
    moim niedoświadczonym zdaniem program w procku albo program sterujący całym ustrojstwem, ale może się mylę bo nie potrafię tego sprawdzić (asembler) .W takiej desperacji łatwo o pomyłkę.
    Dodam że na win 2000 i 98 testuję a jak zapodalem na 95 to win się zawiesił

    pytania pomocnicze:

    1)dalej nie wiem jak ustwić terminal żeby na bieżąco podczas pracy (połączenia) kompa z układem w czasie rzeczywistym obserwować co się dzieje na terminalu rs232 tzn. żebym widział co zadaje z programu sterującego i co odpowiada procek albo przynajmniej żebym widział co wysyła program sterujący do układu po terminalu rs232 (może jestem za ciemny)
    proszę o łapotologiczne wytłumaczenie tego zagadnienia. Na pewno się przyda na potem mnie albo komuś innemu?

    2)Co mam wpisać na klawiaturze kompa żeby zasymulować z terminala to co zadaje program sterująsy?


    Naprawdę bardzo liczę na waszą pomoc

    Pozdrawiam Marek
  • Pomocny post
    #15 1519147
    McRancor
    VIP Zasłużony dla elektroda
    Posty: 5326
    Pomógł: 479
    Ocena: 124
    Musisz skołować leprzego terminala! Takiego który pozwala na makra wysyłające i posiada dwa okna, nadawcze i odbiorcze, poszukaj w internecie jakiegoś konkretnego, albo napisz na PW to wyśle Ci mój ulubiony ;)
  • #16 1519754
    LordBlick
    VIP Zasłużony dla elektroda
    Posty: 5438
    Pomógł: 549
    Ocena: 69
    Marko121 napisał:
    układ według mnie po podłączeniu tylko do zasilania nie powinien nic generować dopiero po ustawieniu coś z kompa powinna zacząć się generacja przebiegów o tym min. świadczy zastosowanie max 603 ,który włącza zasilanie dopiero po uruchomieniu programu sterującego „ddscontrol „ bo wtedy dopiero na linii nr4 rs232 (DTR) pojawia się stan wysoki i co za tym idzie stan ten uruchamia przełącznik w max 603 ,który z kolei podaje zasilanie na procka
    Pisałeś, że nie zastosowałeś MAX-a, więc o czym piszesz teraz ? W kodzie programu wyraźnie jest zaznaczone, że zaraz po resecie mikrokontrolera pojawi się sinusoida.
    		; set sinewave output as default
    		
    		ldi		r31,high(sine)	; setup Z pointer hi
    		ldi		r30,low(sine)	; setup Z pointer lo
    		; clear accumulator 
    		ldi 	r29,0x00		; clear accumulator 
    		ldi 	r28,0x00		; clear accumulator 
    		; setup adder registers		
    		ldi 	r24,0x55		; setup adder value
    		ldi 	r25,0x35		; to 1 kHz
    		ldi 	r26,0x00		; 
    Mamy sinus 1kHz na wstępie ?
    A trudne jest tylko to, w co nie wierzymy...
    W procedurce RX_COMPLETE_INT masz dokładnie w komentarzach, co trzeba wysyłac do procesorka, aby nim sterować. Skoro jednak udało się tobie uruchomic sinusa na wyjściu, to czarów nie ma, układ jest dobrze zaprogramowany.
  • #17 1522674
    Marko121
    Poziom 17  
    Posty: 394
    Pomógł: 10
    Ocena: 120
    Cytat:
    Pisałeś, że nie zastosowałeś MAX-a, więc o czym piszesz teraz ? W kodzie programu wyraźnie jest zaznaczone, że zaraz po resecie mikrokontrolera pojawi się sinusoida.


    Trochę może nie umiejętnie to opisałem .Rzeczywiście nie zastosowałem max-a602 ale Zastosowanie max-a w tym układzie miało właśnie na celu włączenie zasilania dla układu z chwilą uruchomienia programu sterującego a więc dlatego pomyślałem że może musi być jeszcze jakiś spełniony warunek na drodze programowej aby układ wystartował

    Dlaczego tak pomyślałem?
    Dlatego że układ po podłączeniu tylko do zasilania (bez max-a) nie generuje nic (wszystkie porty wyjściowe to 5V i właśnie to najbardziej na tym etapie mnie irytuje) dopiero po podaniu odpowiedniego znaku z terminala układ wystawia sinus
    Dlaczego tak jest ?skoro mówisz że powinien startować od włączenia zasilania?
    Cytat:

    Kod: ; set sinewave output as default

    ldi r31,high(sine) ; setup Z pointer hi
    ldi r30,low(sine) ; setup Z pointer lo
    ; clear accumulator
    ldi r29,0x00 ; clear accumulator
    ldi r28,0x00 ; clear accumulator
    ; setup adder registers
    ldi r24,0x55 ; setup adder value
    ldi r25,0x35 ; to 1 kHz
    ldi r26,0x00 ;

    Ok. zgadzam się wynika z tego że jest sinus ustawiany na wstępie ale w tym miejscu jeszcze nie jest wysyłany na port czy tak? czy się mylę?


    Przy okazji czy możesz mi objaśnić kilka linijek kodu?

    1)—co oznacza :
    .section .text (na początku w oryginalnym listingu)

    2) LOOP1:
    add r28,r24 ; 1(to wiem zawartość r24 + zaw r28 i wynik w r28)
    adc r29,r25 ; 1(to mniej więcej też tylko z jakimś przeniesieniem)
    adc r30,r26 ; 1(podobnie)
    lpm ; 3 ?
    out PORTB,r0 ; 1 ?
    rjmp LOOP1 ; 2 => 9 cycles (powrót do początku ale komętaż?)

    najbardziej interesuje mnie ten fragmęt:
    lpm ; 3 ?
    out PORTB,r0 ; 1 ?
    i co oznaczają te komentarze?
    ja myślę tak:
    po włączeniu zasilania program dochodzi do pętli loop1 i kręci się w kółko czekając na przerwanie od uarta a przy okazji jak się tak ręci to wysyła coś na portB i jeżeli to coś to jest zawartość rejestru r0 to u mnie na symulatorze avrstudio4 r0 ma ciągle i niezmiennie wartość FF (natomiast zmieniają się r28,r29 r30) a wiec jeśli w tym momencie r0 jest wysyłany na port B i ma on wartość ciągle FF to sinusoidy nie będzie tak? Czy może żle myślę? Jeśli się mylę proszę mnie poprawić

    pozdrawiam Marek
  • #18 1522723
    LordBlick
    VIP Zasłużony dla elektroda
    Posty: 5438
    Pomógł: 549
    Ocena: 69
    ad.1 dyrektywa dla kompilatora avr-as-gcc, że następne linie dotyczą pamięci programu.
    ad.2 Cyfry po komentarzach to jest ilość cykli procesora, przypadających na wykonanie danego rozkazu.
    lpm - load program memory - za pomocą rejestru Z(ZL-r30:ZH-r31), służącego do adresowania, pobierana jest wartość z pamięci programu do rejestru r0, w tym przypadku dane z tablic próbek kształtu poszczególnych przebiegów (wcześniej ZL:ZH jest ustawiana na początek tablicy. Trochę ten kod jak dla mnie jest pogmatwany, lepiej to wygląda, gdy się używa nazw symbolicznych, zdefiniowanych w C:\Program Files\Atmel\AVR Tools\AvrAssembler\Appnotes\*def.inc(ale to jest już inny asembler, który zresztą najbardziej mi pasuje... ;) ) :
    .def	XL	=r26
    .def	XH	=r27
    .def	YL	=r28
    .def	YH	=r29
    .def	ZL	=r30
    .def	ZH	=r31
    W kodzie jest opisane przeznaczenie pozostałych rejestrów :
    ;	r28,r29,r30 is the phase accumulator
    ;  	r24,r25,r26 is the adder value determining frequency
  • #19 1523410
    Marko121
    Poziom 17  
    Posty: 394
    Pomógł: 10
    Ocena: 120
    Dzięki za wyjaśnienia

    zostańmy na chwile przy tym kawałku kodu :

    ; main loop
    ;
    ; r28,r29,r30 is the phase accumulator
    ; r24,r25,r26 is the adder value determining frequency
    ;
    ; add value to accumulator
    ; load byte from current table in ROM
    ; output byte to port
    ; repeat
    ;
    LOOP1:
    add r28,r24 ; 1
    adc r29,r25 ; 1
    adc r30,r26 ; 1
    lpm ; 3
    out PORTB,r0 ; 1
    rjmp LOOP1 ; 2 => 9 cycles

    jeśli dobrze zrozumiałem wyjaśnienia to rejestr r0 powinien być załadowywany wartością danej z pod adresu który jest wskazywany przez rejestry r30 i r31 a więc jeśli na symulatorze wartość rejestru r30 zmienia się od 0 do FF co 1 to w rejestrze r0 powinna pojawiać się po kolei coraz to inna wartość (następna dana z kolei z tablicy sine:) a następnie ta wartość jest wysyłana na port czy tak?

    dla jasności:
    gdy r31=0x01(bo cały czas tyle pokazuje symulator)
    i gdy r30=0x00 (r30 zmienia się od 0x00 do 0xFF wskazując kolejne dane)
    to w rejestrze r0 po wykonaniu instrukcji lpm powinna pojawić się dana o wartości 0x80
    po zwiększeniu r30 o1 i po lmp w r0 powinna znaleźć się wartość 83 itd. z tablicy sine:

    ; force table to begin at 256 byte boundary

    .org 0x100

    sine: ; 256 step sinewave table
    .db 0x80,0x83,0x86,0x89,0x8c,0x8f,0x92,0x95,0x98,0x9c,0x9f,0xa2,0xa5,0xa8,0xab,0xae

    czy tak? Wszystko dobrze zrozumiałem?

    Bo jeśli tak to czy mógłbyś mi wyjaśnić dlaczego na symulatorze wartość rejestru r0 pozostaje ciągle stała FF?? tak jakby instrukcja lpm nie była wykonywana wcale .? a może to wina symulatora?

    pozdrawiam Marek
  • #20 1523608
    LordBlick
    VIP Zasłużony dla elektroda
    Posty: 5438
    Pomógł: 549
    Ocena: 69
    No więc tłumacząc kod na AVRStudio, nie zastanawiałem się nad takim szczegółem, że adres ładowany do ZL:ZH powinien być 2 razy wiekszy od adresu etykiety, ponieważ podstawowy rozmiar słowa rozkazowego w AVR wynosi 16bit. Ja sprawdzałem tylko, czy kompilator nie ma problemów z kodem, przyjmując, że autor projektu ten kod przetestował. Możliwe, że asembler od avr-gcc wprowadza automatycznie poprawkę na ewentualność ładowania Z-ki, a jeśli nie, to byk pochodzi od autora... ;) Teraz już powinno być dobrze, poprawiłem oba załączniki w odpowiednim poście powyżej i dołączyłem pliki obj przydatne w symulacji.
    Zastąpiłem odpowiednie fragmenty kodu używanym przeze mnie makro :
    .macro LoadZ_LpmAddr
    	ldi ZL, low(@0<<1) ; Load Z register low
    	ldi ZH, high(@0<<1) ; Load Z register high
    .endmacro
    Jego przykładowe wywołanie :
    		LoadZ_LpmAddr sine	; setup Z pointer
    Pozdrawiam, Daniel
  • #21 1525462
    Marko121
    Poziom 17  
    Posty: 394
    Pomógł: 10
    Ocena: 120
    Tak to jest to dzięki Ci Light'I
    nigdy bym na to nie wpadł.
    jakie to piękne uczucie móc oglądać jak teraz pięknie przesuwają się te okienka od portu B w symulatorze ( to jak piękna melodia) szczególnie po kilku dniach wpatrywania się w nie jak były ciemne i martwe , a potem równie piękny widok przebiegu sinusoidy na ekranie oscyloskopu.

    Już byłem o krok do pełni szczęścia ,kiedy to okazało się że komunikacja po rs232 za pomocą programu „ddscontrol” jak była do kitu to dalej tak pozostała (to jak kubełek lodowatej wody wylanej na rozgrzaną głowę )

    I co ja biedny szaraczek mam teraz począć?
    Na razie nie wiem nawet o co pytać.
    Mam tylko nadzieje Light'I że nie opuścisz mnie w potrzebie i depresji.


    Pozdrawiam Marek
    :D :D :) 8O :( :( :cry:
  • #22 1525480
    LordBlick
    VIP Zasłużony dla elektroda
    Posty: 5438
    Pomógł: 549
    Ocena: 69
    1. Ustawiony w programie właściwy port, do którego się program odwołuje ?
    2. Jaki system operacyjny ?
    3. Czy na forum jest ktoś, komu udało się uruchomic ten projekt całkowicie ? Mam pewne wątpliwości... (brak skompilowanego kodu hex, brak źródeł programu sterującego)
  • #23 1525533
    Marko121
    Poziom 17  
    Posty: 394
    Pomógł: 10
    Ocena: 120
    1)com ustawiony właściwie ( na początku nie wiedziałem gdzie trzeba nacisnąć aby ten potrt sobie w programie wybrać- prawy przycisk myszy na górnym niebieskim pasku i wybrać preferencje tam jest min. wybór comu)
    poza tym widze że jakaś komunikacja jest tylko coś przekłamuje i procek nie reaguje właściwie w zasadzie wcale nie reaguje sygnałem wyjściowym
    tylko odpowiada jakieś pierdoły do kompa (komp -układ nie mogą znależć wspólnego języka mimo że mają się w zasięgu wzroku)

    2) windows 2000 na nim cały czas testuje( wcześniej sprawdzałem na win 98 i to samo a win 95 się zawieszał)

    3)też tak myślę spotkałem się z linkami do tego generatora na forum ale wątpię żeby ktoś go uruchomił

    w chwili desperacji dzisiaj poprosiłem autora o kod .hex do procka i spytałem czy był testowany ten program. Nie wiem co z tego wyjdzie bo z angielskim u mnie krucho (translator)

    nie dawno dostałem linki od kolegi McRancor do monitora rs232 ( niestety shareware ale można coś podejrzeć ) podam może komuś się przyda:

    http://www.tucows.com/preview/244012
    http://www.tucows.com/preview/337692
    http://www.tucows.com/preview/301057
    http://www.tucows.com/preview/355297
    http://www.lammertbies.nl/comm/cable/RS-232-spy-monitor.html
    Dzięki McRancor

    Zainstalowałem serial monitor i wydaje mi się że program wysyła dobre znaki do procka tylko procek mu głupio odpowiada –ale nie jestem pewien czy tak jest Dobrze było by gdyby sprawdził to ktoś bardziej kompetentny


    Cytat:

    3. Czy na forum jest ktoś, komu udało się uruchomic ten projekt całkowicie ? Mam pewne wątpliwości... (brak skompilowanego kodu hex, brak źródeł programu sterującego)

    Light,I czy to znaczy że trzeba się poddać? Że nic nie da się zrobić?
    :cry: :cry: :cry: :cry:
  • #24 1526834
    LordBlick
    VIP Zasłużony dla elektroda
    Posty: 5438
    Pomógł: 549
    Ocena: 69
    Po co dramatyzujesz ? ;)
    Zrobić się zawsze da, tylko nie mam układu przed sobą, aby wszystko co trzeba posprawdzać. Inna kwestia, kod na ATmega8 w takiej postaci nie ma sensu, PORTB jest tam nieosiągalny w całości - PB6 i PB7 są potrzebne do oscylatora kwarcowego 11.0592MHz, a PORTD zawiera linie RxD(PD0) i TxD(PD1)... W zamian kod dla ATtiny2313 i ATmega8515. Oprócz tego usunąłem drobne błędy, więc najlepiej ściągnąć jeszcze raz... ;)
    Co do "dziwnych odpowiedzi", to przytoczę fragment procedurki :
    send_data:
    		push	DataByte				; save DataByte
    		ldi		DataByte, 'F'			; flag
    		rcall	send_char
    
    		clr		DataByte				; zero byte for 32-bit compatibility
    		rcall	send_char		; MSB
    
    		mov		DataByte, XL
    		rcall	send_char		; high add
    
    		mov		DataByte, AddH
    		rcall	send_char		; mid add
    
    		mov		DataByte, AddL
    		rcall	send_char		; low add
    
    		ldi		DataByte, 0x0a
    		rcall	send_char		; terminator
    		pop		DataByte
    		ret
    Jak widać najpierw wysyłane jest F, zero, potem wartości binarne, a na końcu 0x0A(10). Najlepiej te odpowiedzi oglądać w podglądzie hex, który równiez można włączyć w programie terminala, do którego podałem odsyłacz. Umożliwia on także definiowanie makroinstrukcji wywoływanych później Alt+X, gdzie X to klawisz 0-9.
    W najnowszej wersji kodu dodałem możliwość zmiany baudrate bez głębszego wnikania, gdyby były ewentualne chęci na napisanie własnego programu sterującego :
    #define USART_BAUD   115200 //Oryginal MiniDDS baudrate
    Pozdrawiam, Daniel
  • #25 1529554
    Marko121
    Poziom 17  
    Posty: 394
    Pomógł: 10
    Ocena: 120
    Witam
    Na początek może zapodam oryginalny plik .hex , który otrzymałem od autora projektu oto on :(na samym dole bo nie udało mi sie zamieśćić go tu:

    I co mogę powiedzieć. Załadowałem go i po włączeniu zasilania sinusoida owszem od razu się pojawia ale komunikacja niestety kuleje podobnie jak w pozostałych wcześniejszych kodach przerobionych przez Light'I, plik ten waży 4,3 KB a więc więcej niż poprzednie (chociaż nie wiem czy to ma znaczenie)

    Light'I-załadowałem ostatni soft od Ciebie i chyba coś jest nie tak bo sinusoida już po uruchomieniu układu wygląda jak przepuszczona przez mostek z prostowniczy czyli tak: (rys poniżej)
    [/img]przebieg.gif


    Wracając do układu . Udało mi się dwa razy na chyba 200 prób(na różnych softach od Light'I (pierwszym raz i ostatnim-raz) uzyskać poprawną komunikację tzn. wciskając wszystkie przyciski programu sterującego układ poprawnie odpowiadał i reagował i zadana częstotliwość po odpowiedzi układu wyświetlała się w górnym okienku sterowniczym (nie wiem jak sygnał wyjściowy reagował bo go akurat nie mierzyłem) dodam że oba przypadki zdarzyły się na różnych kompach .Jak już udało mi się nawiązać tą komunikacje to włączałem układ ,wyłączałem i program sterujący też i ta komunikacja poprawna dalej była i nie mogłem jej zachwiać , natomiast wstałem rano i podłączyłem ten sam układ i wszystko to samo
    I już nie udało mi się uzyskać prawidłowej transmisji znowu nie reaguje na przyciski funkcyjne i w górnym okienku pokazuje co innego niż zadaję (jakieś kosmiczne cyfry i nie za każdym razem w ogóle reaguje)
    Zimny lut albo nie kontakt raczej nie możliwy(sprawdzałem zmieniałem kable, comy i nic)
    Co to może być w takim razie ?
    Skąd ta 99% niepewność działania ?
    Czy może coś z resetem ? albo już sam nie wiem co?

    Pozdrawiam Marek
    Załączniki:
    • Kompilacja programu AVR w asemblerze - błędy w AVR Studio 4 i WAVRASM przebieg.gif (2.67 KB) Musisz być zalogowany, aby pobrać ten załącznik.
    • minidds.rar (1.61 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • #26 1529919
    LordBlick
    VIP Zasłużony dla elektroda
    Posty: 5438
    Pomógł: 549
    Ocena: 69
    Już zdążyłem zauważyć, poprawiłem, co trzeba - był błąd w adresowaniu rejestru DDRB, którego adres jest o 1 mniejszy od PORTB, a nie większy, jak było w kodzie - układ działał na samych podciągnięciach, a nie na push-pull, stad obcinanie dolnych fragmentów sinusoidy. Z tego wszystkiego postanowiłem zbudować ten układ dla siebie, przyda się przy naprawie torów akustycznych. Przy tej okazji dam znać, jak mi poszło, ATtiny2313, kwarc i MAX232 już nabyłem, na razie nie mam pod ręką drabinki R/2R.
  • #27 1530169
    Marko121
    Poziom 17  
    Posty: 394
    Pomógł: 10
    Ocena: 120
    Super .Cieszę się że zamierzasz wykonać sobie ten układzik –przyda ci się na pewno -ale co najważniejsze może coś się wreszcie wyjaśni

    Jeżeli chodzi o drabinkę to też na razie jej nie mam bo jakoś tak nie mogę jej nigdzie kupić
    Musiałem na razie zrobić sobie ją z oporników do testów( bo czas mnie goni), jak jej nigdzie nie kupię to zrobię z smd ,najważniejsze żeby to ustrojstwo zadziałało.

    Życzę powodzenia w budowie i pozdrawiam
    Marek
  • #28 1664463
    Marko121
    Poziom 17  
    Posty: 394
    Pomógł: 10
    Ocena: 120
    Witam po urlopie .
    Czas zakończyć jakoś ten temat .Układ uruchomiłem i działa za każdym razem . Okazuje się że program sterujący działa tylko pod win 98 ,nie wiem dlaczego wcześniej nie działało ale jak wykasowałem plik minidds.ini ,który tworzy sobie program ( po ustawieniach comu itd. ) , po ponownych ustawieniach wszystko było i jest ok.
    Powiem jeszcze że aby program właściwie pokazywał to co się zadaje należy w ustawieniach w okienku „synthesizer frequency” wpisać odpowiednią liczbę przelicznika ja wpisałem 1,225e+006 i jest ok.

    A co u ciebie Light'I udało ci się wykonać ten układzik czy zaniechałeś budowy ?

    Jeszcze raz dziękuję za pomoc
    Pozdrawiam Marek
  • Pomocny post
    #29 1671848
    LordBlick
    VIP Zasłużony dla elektroda
    Posty: 5438
    Pomógł: 549
    Ocena: 69
    Marko121 napisał:
    A co u ciebie Light'I udało ci się wykonać ten układzik czy zaniechałeś budowy ?
    W takim kształcie jak jest to zaniechałem, a akurat mam sporo roboty, więc ten inny kształt jest odłożony na wolną chwilę, będzie on miał własny wyświetlacz oraz klawiaturę i będzie służył jako taki zgrubny generator do napraw audio.
  • #30 1980632
    Marko121
    Poziom 17  
    Posty: 394
    Pomógł: 10
    Ocena: 120
    Układ działa pod win98 tak jak opisałem w moim ostatnim poście.
    Temat więc można zamknąć.
    Dziękuję za pomoc i pozdrawiam
    Marek

Podsumowanie tematu

LABEL_AI_GENERATED
Dyskusja dotyczy problemów z kompilacją i uruchomieniem programu asemblerowego dla mikrokontrolera AVR, pochodzącego z projektu generatora DDS (Direct Digital Synthesis) dostępnego na stronie myplace.nu. Autor chciał załadować program do AT90S2313 lub ewentualnie ATmega8, używając AVR Studio 4 i WAVRASM, ale napotkał błędy kompilacji oraz problemy z działaniem układu. Wskazano, że oryginalny kod jest pisany pod avrgcc, a dostępne są poprawione wersje kodu i gotowe pliki HEX dla AT90S2313, ATtiny2313 i ATmega8515, z uwzględnieniem warunkowej kompilacji i poprawionych błędów, m.in. w adresowaniu rejestru DDRB.

Problemy sprzętowe obejmowały brak przebiegu na wyjściu generatora, co mogło wynikać z nieprawidłowego taktowania (kwarc 11.0592 MHz, podczas gdy AT90S2313 jest taktowany do 10 MHz), braku układu MAX603 (zasilanie układu) oraz różnic w układzie MAX202/MAX232 do komunikacji RS232. Komunikacja po RS232 była niestabilna, a program sterujący DDSControl działał poprawnie tylko pod Windows 98 po usunięciu pliku konfiguracyjnego minidds.ini i odpowiednim ustawieniu portu COM oraz przelicznika częstotliwości.

Wyjaśniono działanie fragmentów kodu asemblerowego, m.in. wykorzystanie rejestrów do akumulatora fazy i wartości dodawanej do generacji sygnału sinusoidalnego, oraz adresowanie pamięci programu za pomocą rejestrów ZL i ZH. Zwrócono uwagę na konieczność stosowania odpowiednich narzędzi i terminali do testowania komunikacji RS232. Ostatecznie autor potwierdził działanie układu z oryginalnym plikiem HEX i zamknął temat, dziękując za pomoc.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA