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

[Assembler][ATtiny2313][Podstawy] Zaczynamy naukę

Adrian_sekowski 25 Sty 2010 18:49 8176 30
  • #1 7590527
    Adrian_sekowski
    Warunkowo odblokowany
    Witam wszystkich tu zgromadzonych.
    Zakładam temat aby jakoś zebrać to wszystko w jednym temacie.

    Zamierzam się w najbliższym czasie bardziej zainteresować programowaniem w assemblerze. Nie wiem dlaczego on, może dlatego, że wszyscy piszą iż jest trudny - nie wiem.

    Czytam, przeglądam, rozmyślam już ok tygodnia nad tym problemem. Mam duże problemy sam z siebie czegoś szukać i rozwiązywać problemy dlatego prosiłbym aby ktoś mnie pokierował co najpierw mam przyswoić a co później.

    Korzystam z wielu stron patrzą i próbując zrozumieć rejestry, komendy i tego typu rozkazy. Ale co mi po tym skoro i tak nie wiem czy dobrze się do tego zabieram.

    Kupiłem i czekam na programator USB kupiony z allegro od kogoś za przyzwoitą kwotę (nowy to koszt ok 35zł + wysyłka), Jestem w trakcie wykonywania podstawki do niego dla ATtiny2313 oraz ATmega8. Kwarc jaki zastosuje na podstawce to 9,8MHz (taki mam pod ręką).

    Oto linki z których korzystam do tej pory:

    Strona 1
    Strona 2
    Strona 3
    Strona 4

    Mam zainstalowane AVRstudio4 oraz AVRdude

    Więc o co mi chodzi powiecie. Szukam gdzieś konkretnie wyjaśnienia czego mam po kolei szukać i przyswajać. Wszędzie do tej pory znajduję jak ustawić porty jako wejścia lub wyjścia i przypisać im stany logiczne 0 lub 1 tworząc tym samym 8bitowe liczby. Zastanawia mnie i nie znalazłem do tej pory odpowiedzi jak można zrobić wejście jako czujnik. Np napięcie 0-5V i ono się zmienia zależnie od temperatury. µC ma na wyjściu sterować i załączać np na zmianę Wentylatorem i grzałką (wiem że bez sensu ale chodzi o przykład).

    Na razie wiem że w assemblerze można porównywać np stan wejścia do czegoś zapisanego w rejestrze jako stała no ale jak zrobić aby on rozpoznawał ze wejście się zmienia analogowo a nie tylko 0-1? Musi być przetwornik A/C ?
  • #2 7590546
    ZbeeGin
    Poziom 39  
    Nie musi być ADC. Możesz użyć wbudowanego komparatora. Choć dalej będzie to wejście dwustanowe, ale będziesz mógł regulować próg działania np. przez potencjometr lub PWM z filtrem.
  • #3 7591642
    Balu
    Poziom 38  
    Tak, zapomnij raczej o komparatorze nie bierz się za pierdoły:P, zacznij od atmegi jakiejkolwiek (np. 8) tam masz, ADC.

    A na początek dioda świecąca, dioda migająca, potem uart, potem dopiero myśl o czymś ala ADC:)
    Jak już będziesz miał na czym debugować;P

    PS bez asma ciężko się pisze programy. Dobrze znać choć pobieżnie. Ale asm w avr jest tak prosty, że jego nie da sie znać pobieżnie :)
  • #4 7592932
    ZbeeGin
    Poziom 39  
    Dlaczego zawsze jak coś analogowego to zaraz ADC? Czasem warto poznać inne metody uzyskania jakiegoś efektu.
    I ciągle tylko Mega8 i Mega8? Czyżby na rynku nie było innych modeli procesorów AVR?
  • #5 7593044
    Adrian_sekowski
    Warunkowo odblokowany
    A więc.

    Chciałbym zauważyć że ja chciałem uzyskać pomoc w wyjaśnieniu komend lub bezpośrednią odpowiedz jak mam zrobić i czy da się tak zrobić aby µC zapamiętał zmienną odczytaną z wejścia jako jakąś liczbę. Z tego co widzicie nie dostałem żadnej odp na ten temat.

    Dlaczego ATmega8 i Attiny2313? może dlatego że dostane je gratis z programatorem :P

    A tak poważnie. Czy jest jakiś wykaz asemblera rozkazów i komend co za co odpowiada. ATmega8 ma na stronie 289 taki wykaz poleceń do zawarcia w programie a funkcje assemblera?

    I ktoś bodajże ZbeeGin pisał mi w PW że mogę przełączać wejścia do komparatora 2313. Czy możesz rozwinąć tę myśl tutaj. Jak zapisać wartość napięcia jakąś do rejestru i przenieść ją do komparatora? Proszę nie pisać że sie nie da zapisać bo też tak myślę no ale ... ja sie ucze dopiero :P
  • #6 7593118
    Balu
    Poziom 38  
    Jest wykaz mnemoników asmowych na stronie atmela.
    Nota 1022 z atmela, www.atmel.com/atmel/acrobat/doc1022.pdf

    Komparator jest jedno bitowy.

    Tak, można zapisać wartość do jakiegoś rejestru.
    z głowy :
    mnemonik LDI r15, 243 - do rej. r15 trafia 243...
    Niestety do komparatora się tego przenieść nie da... Patrzy wyżej.

    Nie wiem czemu ZbeeGin tak usilnie Ci go wciska...
    Jak łatwiej szybciej i co najważniejsze w tej samej cenie (a w mniejszej obudowie) można mieć atmega8.

    @ZbeeGin dlatego atmega8, bo jest mniejszy, i w tej samej cenie. Więc po co płacić tyle samo za coś z mniejszymi możliwościami (brak adc chociażby?).
    Ł.
  • #7 7593140
    Adrian_sekowski
    Warunkowo odblokowany
    Nie bardzo jeszcze ogarniam to co napisałeś i zajmę się tym za kilka dni a może po sesji dopiero ale:

    Wiem że do rejestru można wpisać liczbę 243 binarnie na 8 bitach i mamy 0b11110011 no ok. Ale przecież ja tego 0b11110011nie odczytam z jednego wejścia np PB5 ?

    No i? Czy coś pominąłem

    Rozmawiamy cały czas dydaktyczno-teoretycznie na temat 2313.
  • #8 7593158
    grysek
    Poziom 19  
    Z jednego wejścia nie. Ale mozesz odczytać z całego portu jeden bajt
    np. in r16, PORTB i wtedy każdy bit w rejetrze oznacza pin. np 0b10000000 bedzie oznaczać że masz jedynke na wejściu PB7.

    Oczywiście piny ustawione w DDRx jako wejścia lub wyjscia wcześniej.

    Można odczytać z jednego pinu przy transmisji szeregowej lub np z przetwornika ADC
  • #9 7593167
    ZbeeGin
    Poziom 39  
    Adrian_sekowski napisał:
    Chciałbym zauważyć że ja chciałem uzyskać pomoc w wyjaśnieniu komend lub bezpośrednią odpowiedz jak mam zrobić i czy da się tak zrobić aby µC zapamiętał zmienną odczytaną z wejścia jako jakąś liczbę. Z tego co widzicie nie dostałem żadnej odp na ten temat.

    Niestety pytanie w pierszym poście było odmiennie sformułowane. Zatem pierwsza rzecz jaką trzeba się nauczyć przy asemblerze: jasno formułować swoje potrzeby by prawidłowo przenieś je na program.

    Adrian_sekowski napisał:
    A tak poważnie. Czy jest jakiś wykaz asemblera rozkazów i komend co za co odpowiada. ATmega8 ma na stronie 289 taki wykaz poleceń do zawarcia w programie a funkcje assemblera?

    Chwalisz się, że posiadasz zainstalowane AVR Studio. A czy przyszło Ci do głowy by zajrzeć do jego helpa? Tam opisane są wszystkie mnemoniki, dyrektywy i funkcje specjalne jakie asembler rozpoznaje.

    Adrian_sekowski napisał:
    I ktoś bodajże ZbeeGin pisał mi w PW że mogę przełączać wejścia do komparatora 2313. Czy możesz rozwinąć tę myśl tutaj. Jak zapisać wartość napięcia jakąś do rejestru i przenieść ją do komparatora? Proszę nie pisać że sie nie da zapisać bo też tak myślę no ale ... ja sie ucze dopiero :P

    Nie napisałem, że można przełączać wejścia komparatora 2313. Czytaj dokładnie i ze zrozumieniem: "w nowszych procesorach". Przykładem tego jest ATTiny26(261).
    Bezpośrednio się zapisać nie da. Trzeba skorzystać z możliwości jakie dają liczniki, w których można generować przebieg prostokątny z tą samą częstotliwością ale różnym wypełnieniem tzw. PWM, co po przepuszczeniu przez filtr RC da nam w przybliżeniu: stopień wypełnienia 0-100% = napięcie 0-5V. I te napięcie po wprowadzeniu z powrotem do komparatora jako napięcie odniesienia da nam możliwość porównania go z innym napięciem. Wtedy to mamy dwa stany: mniejsze i większe reprezentowane dwójkowo.

    Balu napisał:
    Nie wiem czemu ZbeeGin tak usilnie Ci go wciska...

    Nikomu nie wciskam. Pokazuję, że czasem nie trzeba armaty (np. ATMega2560) by ustrzelić wróbla (np. migacz LED z melodyjką) i inną drogą uzyskać żądany efekt.

    Balu napisał:
    @ZbeeGin dlatego atmega8, bo jest mniejszy, i w tej samej cenie. Więc po co płacić tyle samo za coś z mniejszymi możliwościami (brak adc chociażby?).

    Projekty z których 90% opartych jest na ATMega8 stają się nudne. Stanie na tym, że forumowicze jak dostaną do ręki ATTiny13 i będą musieli na nim zrobić sterownik wentylatora to... tego nie zrobią, gdyż znają tylko ATMega8.

    ps. Idę bawić się syntezą mowy na MSP430. :P
  • #10 7593192
    Balu
    Poziom 38  
    A ja uważam, że w zyciu zawodowym nie ma co skakać po 100 modelach...
    Trzeba dobrze znać 2...4 modele które są well suitable for almost everything;)
    Tym sposobem używam m8, m32, m128, m2560 ;) Zależnie od potrzeb:)
    Teraz jeszcze m32u4 ;) czy coś w ten deseń :)
  • #11 7593197
    Adrian_sekowski
    Warunkowo odblokowany
    ZbeeGin napisał:


    Adrian_sekowski napisał:
    A tak poważnie. Czy jest jakiś wykaz asemblera rozkazów i komend co za co odpowiada. ATmega8 ma na stronie 289 taki wykaz poleceń do zawarcia w programie a funkcje assemblera?

    Chwalisz się, że posiadasz zainstalowane AVR Studio. A czy przyszło Ci do głowy by zajrzeć do jego helpa? Tam opisane są wszystkie mnemoniki, dyrektywy i funkcje specjalne jakie asembler rozpoznaje.



    Fakt na helpa się nie natknąłem :) Wiem czytałem że cały port sczytam jako 8 bitów ale zastanawiałem się czy dam radę jeden jakoś odczytać w ten sposób teraz już wiem że nie :P
  • #13 7613067
    Adrian_sekowski
    Warunkowo odblokowany
    No dobra złożyłem sobie już podstawkę do programatora. Teraz pytanie.

    Chcę sprawdzić czy scalak mi działa i programator więc na początek chcę zbudować to Mrugająca dioda

    Widać jak byk iż jest tam na schemacie rezonator kwarcowy. Oczywiście można go dać ale najpierw trzeba go kupić co daje nam pewnie koszta.

    Czytałem że wewnątrz scalaka jest rezonator RC 4 lub 8 MHz. Czy dopisanie komendy ($crystal 1000000) do kodu i będzie śmigać czy nic nie dopisywać i też będzie latać.

    Teraz te nieszczęsne Fuse Bity. Ja złożyłem podstawkę z kwarcem 9,83 MHz a programator dla atmega8 ma 12MHz. Do programawonia użyje poleconego programu mkAVR. Czy muszę zmieniać te fusebity jak bede używał zaprogramowanego układu z wewnetrznym lub zewnętrzym rezonatorem?

    Oto Error jaki wywala mi przy wciskaniu przycisku sprawdz podłaczony AVR (wsadzony attiny2313-2DP0 i kwarc 9,83 NDK) Aha i przy tej czynności zanim wywali mi error to zapala się dioda że niby programuje czy tam sprawdza coś

    [Assembler][ATtiny2313][Podstawy] Zaczynamy naukę [Assembler][ATtiny2313][Podstawy] Zaczynamy naukę [Assembler][ATtiny2313][Podstawy] Zaczynamy naukę [Assembler][ATtiny2313][Podstawy] Zaczynamy naukę
  • #14 7613166
    Balu
    Poziom 38  
    bez rez. kwarcowego też powinno działać nowy uC chodzi na wew. RC.
    Dopisanie komendy nic nie da. Jedynie zmieni kod programu, ale nei przestawi na inny zegar procka.
    FBity. Tak musisz jeśli chcesz z zew. lub wew.
    Ł.

    Dodano po 46 [minuty]:

    Znaczy błąd jakiegoś połączenia...
    Nie zwraca sygnatury.
    Brak zasilania/zwarcie na liniach/cokolwiek...
    Krzyżyk na drogę w używaniu takiego dev board'a:)
  • #15 7613459
    Adrian_sekowski
    Warunkowo odblokowany
    dev board'a ??

    Znaczy sie zwarcia niby nie ma. Jak już to albo kwarc coś zły jest albo zworka bo mam też zworkę slow 2MHz tam no i nie wiem. Gdzie szukać przyczyny?


    błąd samego programatora bez podstawki

    [Assembler][ATtiny2313][Podstawy] Zaczynamy naukę

    Czy to wina tego AVR dude? może nie zainstalowałem albo coś?

    Podstawka z tego schematu tylko kwarc mam 9,83 czegoś (chyba MHz)

    [Assembler][ATtiny2313][Podstawy] Zaczynamy naukę
  • #16 7613979
    Balu
    Poziom 38  
    KWARC NIC NIE ZMIENIA!
    Ile razy można pisać że w fuseach trzeba przestawić na kwarc. (Do tego musi dzialac programator!).
    Ustaw zworke na wolną transmisję, jeśli ciągle nic -> idź męczyć sprzedawcę programatora - niech zarobi swoje pieniążki godnie.
    P.S. Zmien to wielkieeeeeeeeeeeee zdjecie bo będzie krzyk czerwonych.
  • #17 7614275
    ZbeeGin
    Poziom 39  
    Adrian_sekowski napisał:
    Czytałem że wewnątrz scalaka jest rezonator RC 4 lub 8 MHz. Czy dopisanie komendy ($crystal 1000000) do kodu i będzie śmigać czy nic nie dopisywać i też będzie latać.

    Chcesz się nauczyć asemblera pisząc w języku BASCOM Basic?
  • #18 7614883
    Adrian_sekowski
    Warunkowo odblokowany
    ehh tylko to znalazłem i to był przykład - trzeba zacząć że mi programator nie działa chwilowo :P

    Nigdzie na razie nie widziałem innego polecenia :)

    Spokojnie powoli sie coś wymyśli narazie prubuje odpalić programator :)
  • #20 7616352
    janbernat
    Poziom 38  
    "Chcesz się nauczyć asemblera pisząc w języku BASCOM Basic?"
    a co- bardzo fajny:
    $asm
    ... ...
    $end asm
    Adrian-sekowski- zmień temat na np. " jak podłączyć i skonfigurować programator".
    A potem cos o asm.
  • #21 7619402
    ZbeeGin
    Poziom 39  
    janbernat napisał:
    "Chcesz się nauczyć asemblera pisząc w języku BASCOM Basic?"
    a co- bardzo fajny:
    $asm
    ... ...
    $end asm

    Samo $ASM...$END ASM nie wystarczy. Bascom dodaje też coś od siebie.
    Nawet jakbyś pododawał te pozostałe dyrektywy wyłączające to musisz się trzymać kilku ograniczeń. Powstaje hybryda której nie da się kontrolować w pełni, a nie o to przecież w pisaniu w języku asembler chodzi.

    Adrian_sekowski napisał:
    ehh tylko to znalazłem i to był przykład - trzeba zacząć że mi programator nie działa chwilowo :P

    To zamiast tych rezystorów 330R załóż zwory. One są teraz zupełnie niepotrzebne i wręcz przeszkadzają.
  • #22 7619421
    Adrian_sekowski
    Warunkowo odblokowany
    Programator działa już, wrzuciłem nowy program w scalaka i jest oki, druga kwestia to źle zaprojektowałem podstawę (pomyliło mi sie i źle nóżki policzyłem procesorów).

    Tak więc wszystko w kwestii programu jest już oki. Teraz tylko po sesji za jakieś 2tyg zajmę się czytaniem tych plików tekstowych co je pościągałem do assemblera i bede zaczynał tworzyć.

    Jak zrobie drugą płytke to dodam fotki :) Ale tym razem już działającej :P

    Programator USBasp:
    [Assembler][ATtiny2313][Podstawy] Zaczynamy naukę [Assembler][ATtiny2313][Podstawy] Zaczynamy naukę
    W temacie: Programator USB dla mikrokontrolerów AVR
  • #23 7735135
    Adrian_sekowski
    Warunkowo odblokowany
    A więc zaczynamy:

    Napisałem programy przykładowe i wszystko pięknie chodzi diodki się zapalają gasną - po prostu jest dobrze.

    Napisałem program w AVR Studio 4 i symulacja pokazuje że wszystko powinno działać no ale nie działa.


    Tu jest przycięty kod programu który też nie działa mi.

    
      	.nolist 	  				
      	.include 	 "2313def.inc" 	
      	.list 	  					
      	.listmac 	  				
    		
      	.cseg 	  					
      	.org 	0 					
      	rjmp 	ResetProcessor 		
    
    ;----------------- Tabela wektorów przerwań (Interrupt Vectors) 
    
      	.org 	INT0addr 			; External Interrupt0
      	reti 	  					; Vector Address
      	.org 	INT1addr 			; External Interrupt1
      	reti 	  					; Vector Address
      	.org 	ICP1addr 			; Input Capture1 Interrupt
      	reti 	  					; Vector Address
      	.org 	OC1addr 			; Output Compare1A
      	reti 	  					; Interrupt Vector Address
      	.org 	OVF1addr 			; Overflow1 Interrupt
      	reti 	  					; Vector Address
      	.org 	OVF0addr 			; Overflow0 Interrupt
      	reti 	  					; Vector Address
      	.org 	URXCaddr 			; UART Receive Complete
      	reti 	  					; Interrupt Vector Address
      	.org 	UDREaddr 			; UART Data Register Empty
      	reti 	  					; Interrupt Vector Address
      	.org 	UTXCaddr 			; UART Transmit Complete
      	reti 	  					; Interrupt Vector Address
      	.org 	ACIaddr 			; Analog Comparator
      	reti 	  					; Interrupt Vector Address
    ;---------------------------------------------------------------------------------------------
    ; Ogólna teria działania:
    ;
    ;-----------------------------------------------------------------------
    ResetProcessor 	: 	  		;
      	cli 	  				; zablokowanie przerwań
    	
    	ldi 	r16,LOW(RAMEND) 	; inicjacja stosu
      	out 	SPL,r16 			; programowego
    								;
      	ldi 	r16,0xFF 			; cały port B jako wyjściowy
      	out 	DDRB,r16 			; wszystkie wyjścia portu B
      	out 	PORTB,r16 			; w stanie wysokim
    								;
      	ldi 	r16,0x9C 			; PD0 PD1 PD5  PD6 - jako wejścia,
      	out 	DDRD,r16 			; reszta jako wyjścia
    								;
      	ldi 	r16,0xFF 			; wszystkie wyprowadzenia
      	out 	PORTD,r16 			; portu D w stanie wysokim
    	
    	ldi		r19,0xFE
    	ldi		r20,0xFD
    	ldi		r21,0xFB			; 9c - 10011100
    	ldi		r22,0xF7			; 63   01100011
    	ldi		r23,0xFF
    
    
    ;---------------------------------------------------------------------------------------------
    Main_0 	: 	  					; początek pętli głównej
    
    
    	in 	r18,PIND 		        ; wczytanie PIND do r16
      	andi 	r18,0x63			; iloczyn logiczny r16 i 7
      	cpi 	r18,0x01 			; czy jest przyciśnięty SW1
      	breq 	Przycisk_1 			; tak - to skocz do Przycisk_1
    	cpi 	r18,0x02 			; czy jest przyciśnięty SW2
      	breq 	Przycisk_2 			; tak - to skocz do Przycisk_2
    	cpi    r18,0x20			; czy jest przyciśniety SW3
    	breq	Przycisk_3			; tak - to skocz do Przycisk_3
    	cpi	r18,0x40			; czy jest przyciśniety SW4
    	breq	Przycisk_4			; tak - to skocz do Przycisk_4
      	rjmp 	Main_0 			; powrót do pętli głównej
    ;---------------------------------------------------------------------------------------------
    Przycisk_1 	: 					
    		
    	out		PORTB, r19
    	rcall	delay
    	out		PORTB, r23 		
    	rjmp 	Main_0
    ;---------------------------------------------------------------------------------------------
    Przycisk_2 	: 	 		
    				
    	out		PORTB, r20
    	rcall	delay
    	out		PORTB, r23
    	rjmp 	Main_0
    
    								
    ;-------------------------------------------------------------------------------------------
    Przycisk_3 :					
    	
    	out		PORTB, r21
    	rcall	delay
    	out		PORTB, r23
    	rjmp    Main_0	
    
    ;-------------------------------------------------------------------------------------------
    Przycisk_4 :				
    	
    	out		PORTB, r22
    	rcall	delay
    	out		PORTB, r23
    	rjmp 	Main_0
    
    Delay :					
    	ldi		r16, 0x00
    Delay_0 :
    	inc 	r16
    	brne 	Delay_0
    	inc		r17
    	brne	Delay_0
    	ret
    

    ---------------------------------------------------------------------

    Według mnie z tego co zauważyłem nie mogę przypisać PORTD jako wejścia.
    Gdy przypiszę tylko wejścia PD0 i PD1 to wszystko działa ale jak dodam trzecie to attiny nie reaguje wcale,

    Powyższy kod źródłowy to moja ostatnia wersja którą pominąłem wejścia INT0 INT1 bo może to był problem ale nie działa nadal.

    Co sądzicie o tym bo symulacja mi działa w AVR Studio. FuseBity nieruszane nowy scalak, kwarc wewnętrzny

    Mam jeszcze pomysł aby zamienić porty B z D i może to coś mi pomoże ale poczekam co powiecie
  • #24 7735247
    grysek
    Poziom 19  
    Popełniłeś jeden błąd logiczny, a mianowicie wejścia portu D podciągasz do plusa, no więc musisz je zwierać do masy aby był jakiś efekt, a co za tym idzie musisz sprawdzać czy pin jest zgaszony a nie ustawiony, np. zamiast:

    cpi r18,0x40 ; czy jest przyciśniety SW4  ;0b01000000
    breq Przycisk_4 ; tak - to skocz do Przycisk_4


    powinno być:
    cpi r18,0x23 ; czy jest przyciśniety SW4  ;0b00100011
    breq Przycisk_4 ; tak - to skocz do Przycisk_4


    albo zanegować całą wartośc wejściową jeszcze przed wykonaniem iloczynu.

    I kilka rad:
    Ja bym dodał opóźnienie w pętli głównej, a pozatym nie musisz za każdym razem wypisywać wszystkich wektorów, tylko te które używasz a resztę kompilator uzupełni sam :P

    Pozdrawiam
  • #25 7735330
    Adrian_sekowski
    Warunkowo odblokowany
    A czy to ma jakieś powiązanie do pierwszych przycisków - przecież nic mi nie działa no ale bede sprawdzal.

    Dlaczego do SPL przypisuje sie liczbę jakąś a ja mam ramend ?

    No moim założeniem było że zwieram przyciskiem do masy więc nie mam pojęcia o co ci chodziło
  • #26 7735399
    grysek
    Poziom 19  
    Ma powiązanie z resztą przycisków. Musisz poprawic wartości przy cpi albo dodać "com r18" zaraz przed "andi r18,0x63". No domyśliłem się że takie założenie było, czyli skoro zwierasz do masy to skok do podprogramu musisz wykonac wtedy jeśli na pinie jest 0.

    Skoro piny podciagnąłeś do plusa za pomocą pull-up'a wewnętrznego to oznacza że jak przycisk nie jest naciśnięty to na pinie występuje logiczne 1. A jak wciśniesz to masz zero bo wygaszasz tą jedynkę na wejsciu. Natomist w Twoim programie są warunki porównujące czy na pinie występuje 1 czyli tak jakbyś miał przycisk zwierający do plusa.

    Przeczytaj to co napisałem i przeanalizuj to wraz ze swoim programem.

    RAMEND to jest stała która wynika z pliku "2313def.inc" który dodałeś na początku programu i oznacza adres ostatniej komórki pamięci RAM
  • #27 7735526
    ZbeeGin
    Poziom 39  
    Dwie linie i już błąd...? Dlaczego kolega używa nagłówka dla 2313 z serii Classic skoro w płytce siedzi Tiny2313?
  • #28 7735649
    Adrian_sekowski
    Warunkowo odblokowany
    Jak dla mnie to całkiem bez sensu ale działa:

    
    	in 	    r18,PIND 			; wczytanie PIND do r16
    	com 	r18
      	andi 	r18,0x63			; iloczyn logiczny r16 i 7
      	cpi 	r18,0x01 			; czy jest przyciśnięty SW1
      	breq 	Przycisk_1 			; tak - to skocz do Przycisk_1
    	cpi 	r18,0x02 			; czy jest przyciśnięty SW2
      	breq 	Przycisk_2 			; tak - to skocz do Przycisk_2
    	cpi		r18,0x20			; czy jest przyciśniety SW3
    	breq	Przycisk_3			; tak - to skocz do Przycisk_3
    	cpi		r18,0x40			; czy jest przyciśniety SW4
    	breq	Przycisk_4			; tak - to skocz do Przycisk_4
      	rjmp 	Main_0 				; powrót do pętli głównej


    AVR Studio pokazuje że to nie ma racji działać a scalak wykonuje to idealnie - dlaczego wydaje mi sie że to jakaś parodia? Coś żle zrobiłem?
  • #29 7735753
    grysek
    Poziom 19  
    Przemyśl to kilka razy a odnajdziesz sens w tym :P

    Skoro działa, tzn że napisałeś dobrze. A z moich obserwacji wynika że AVRStudio nie uwzględnia podciągania pinów. Dlatego programista nie może polegać tylko na symulatorze ale głównie powinien polegać na sobie.
  • #30 7735938
    Adrian_sekowski
    Warunkowo odblokowany
    A powiesz mi coś o przerwaniach? Np czy mogę użyć przerwanie aby zwiększyć rejestr o 1? Jak to zrobić
REKLAMA