Moim zdaniem za użyciem RTOS przemawia po prostu lenistwo, zresztą podobnie jak za 99% praktyk programistycznych. Bardzo merytoryczny argument. W zasadzie większość Twojego postu można niestety streścić tak - "jestem mega mistrzem programowania, każdy kto robi coś inaczej niż ja jest niedouczonym leniem"... Praktycznie nie ma tam żadnego merytorycznego...
1. assembler 2. timer 0x41 0x56 0x45!!
cjne A,02h,etykieta - co znaczy porównaj i skocz gdy nie są równe. W tym przypadku 02h to R2 w banku 0. Zakładam że wartość z klawiatury jest w A oraz, że jest to wartość 0-9. Jeśli kod klawisza jest inny należy do programu dorzucić tablicę z kodami klawiszy.
Bo jak ma działać? Widać kolega nie do końca rozumie mechanizm przerwań, skoro czeka na przerwanie INT0, a włącza przerwanie przepełnienia Timera0. Adresem przerwania przepełnienia Timera0 jest OVF0addr, a nie INT0addr. Przerwanie od INT0 wyzwalane jest ZEWNĘTRZNIE zboczem lub stanem na fizycznym wejściu INT0 mikrokontrolera, a nie Timerem. Skąd ten...
Tryb CTC jest w atmega8 na timer1 i timer2, Jeżeli chcesz mieć dokładnie to zastosuj któryś z powyższych timerów. przy odpowiednim skonfigurowaniu timera może on automatycznie zmieniać stan na odpowiednim wyjściu. (dla timer 1 jest to OC1A/PB1 OC1B/PB2, a dla timer2 OC2/PB3) W trybie CTC nie musisz ciągle wpisywać wartości do TCCRx.
Assembler tu nic nie pomoże. Standardowy timer jest zbyt wolny. Musisz sam oprogramowac zależności czasowe. Poczytaj coś o funkcjach HPT (coś w rodzaju QueryPerformanceCounter i inne). Dzięki nim można osiągnąć rozdzielczości kilkunastu mikrosekund.
Niestety czasu nadal nie mam zeby odpowiedziec dokladnie (moze jutro się cos znajdzie :) ), Co do 'zasymulowania' to Keil jest bardzo dobry ew. (juz nie pamietam ktory mnie bardziej odpowiadał, bo ostatnio ich nie uzywalem) jest jeszcze Raisonance (http://www.raisonance.com/ ) i oba są dosc fajnymi srodowiskami zarówno do pisania jak i testowania kodu....
Wszystko pięknie, ładnie, ale żaden z programów nie działa... Program excray'a, się kompiluje, ale: nie widzę nigdzie wyjścia OCR1A (PB1), na które jest podawany sygnał wyjściowy PWM'a. Na wyjście to podawany jest stan niski (ustawiony bit COM1A1). Dodam tylko, że chodzi o PWM w trybie Phase Correct. W moim programie wszystko jest ok, poza odczytem...
coś w ten deseń? na razie chodzi mi o to że: Licznik działa zgodnie z zegarem. Po przepełnieniu występuje przerwanie, a jego obsługa skacze do timera i uruchamia go na nowo. cały czas nasłuchuje usart i gdy nadejdzie przerwanie, to obsługa wrzuca z tcnt(czyli wartość licznika) do tablicy coś z tego ma sens? .include "m32def.inc" .cseg .org 0 jmp restart;...
U Ciebie nic nie dzieje sie w przerwaniu - gdy tylko do niego dojdzie to program automatycznie z niego wyskakuje przez RETI. W przerwaniu powinienes umiescic zlicznie do 8 a nie gdzies indziej. Gdy zliczysz to wtedy przesuwasz bity na swoim porcie, zerujesz swoj licznik i kreci sie wszystko od nowa. BF na szybko (ni to C, ni to assembler ale idea:)...
Moze zle sie wyrazilem - nie tyle skladnia pozostaje dla mnie niejasna, co nie umiem stwierdzic, dlaczego nie jest generowany plik ELF, pomimo tego, ze w pliku make istnieje regula (chyba) za to odpowiedzialna. # MCU name MCU = attiny45 # Processr frequency. # This will define a symbol, F_CPU, in all source code files equal to the # processor frequency....
Witam. Znalazłem w necie. To powinno pomóc rozwiązać twój problem. Gościu tu przedstawia jak uśpić procesor i obudzić go przerwaniem INT0. [syntax=c] #define LED_PIN 4 void setup() { pinMode(LED_PIN, OUTPUT); //Save Power by writing all Digital IO LOW - note that pins just need to be tied one way or another, do not damage devices! for (int i = 0; i...
... To w mniej więcej w taki sposób pisze się programy do zegarów alfanumerycznych, i w ogóle obsługę przerwań tak się pisze? WIem tylko, że one (te zegary)zczytują z odzielnych funkcji cyfry i je wyświetlają, a ustawienie godziny ejst możliwe w takim razie w każdym momencie ... Najprostszym rozwiazaniem dla takiego zegarka bylby program zawarty praktycznie...
A niby dlaczego miałby nie funkcjonować? Gdyby zawartość SRAM była tracona to program musiałby się wykonywać od początku, co efektywnie byłoby równoznaczne z resetem procesora. Oczywiście w każdym trybie oszczędzania energii zawartość SRAM jest zachowana, co czyni twoje rozważania nieco pozbawionymi sensu. Jeśli chcesz wydłużyć czas to do wybudzania...
Stary post ale , jest sposob aby przerwania od timera wystepowaly w rownych(co do jednego cylku) z gory okreslonych odstepach. Przy kwarcu 12MHz aby odmierzac rowne czasy np 20ms wystarczy na poczatku przerwania wpiac taka procedurke ktora modyfikuje odpowienido rejestry TL0 i TH0 i uwzglednia opoznienie czasowe. t0VAL equ 20000 ; czas miedzy przerwaniami...
Przykładowy pełny program poniżej. Kompiluj najlepiej w CodeVisionAVR, nie będzie niespodzianek. Program można znaleźć pod adresem zawartym w ramce (wersja free). Dołączam też pliki .C .cof .hex .map i dla dociekliwych .asm i .lst Pozdr tOMmy /***************************************... This program was produced by the CodeWizardAVR V1.23.8a Standard...
Witam serdecznie, Mam pytanko. W jaki sposób skompilować plik w asemblerze na plik hex lub bin dla układu PIC 12F675? Nigdy tego nie robiłem, więc prosiłbym o jakieś wskazówki lub pomoc. Poniżej kod w asemblerze. Poprawiłem temat, pisownię i kolorowanie składni.
Witam czy mógłby ktoś sprawdzić poprawność kodu Assembler '51? Czy składnia jest ok? WDTCN DATA 0FFH ; WATCHDOG TIMER CONTROL AMX0CF DATA 0BAH ; ADC 0 MUX CONFIGURATION AMX0SL DATA 0BBH ; ADC 0 MUX CHANNEL SELECTION ADC0CN DATA 0E8H ; ADC 0 CONTROL ADC0H DATA 0BFH ; ADC 0 DATA - HIGH BYTE REF0CN DATA 0D1H ; VOLTAGE REFERENCE 0 CONTROL ADC0CF DATA 0BCH...
Napisałem coś takiego ASSEMBLER ;klawiatura KEY_START EQU P1.1 KEY_UP EQU P1.2 TX EQU 031H; ZMIANNA DLA TIMERA WY1 EQU P2.2 ;Wyjście generatora ;TIMERY T0_G EQU 0 T0_C EQU 0 T0_M EQU 1 TIM0 EQU T0_M+T0_C*4+T0_G*8 T1_G EQU 0 T1_C EQU 0 T1_M EQU 0 TIM1 EQU T1_M+T1_C*4+T1_G*8 TMOD_SET EQU TIM0+TIM1*16 THO_SET EQU 256-180 TLO_SET EQU 0 ;***************************************...
W pliku lpc17xx.h są zdefiniowane wszystkie makra odwołujące się do rejestrów peryferii, tak np. [syntax=c] /*------------- General Purpose Input/Output (GPIO) --------------------------*/ typedef struct { __IO uint32_t FIODIR; uint32_t RESERVED0[3]; __IO uint32_t FIOMASK; __IO uint32_t FIOPIN; __IO uint32_t FIOSET; __O uint32_t FIOCLR; } GPIO_TypeDef;...
Testy można przeprowadzić w niektórych symulatorach np. [url=http://www.edsim51.com/]edsim51. Przykładowy kod poniżej. [syntax=asm] sekundy EQU 07Eh ;zmienna sekund jedna_dwudziestaEQU 07Fh ;licznik jednej dwudziestej sekundy resetowanie EQU 19456 ;ustawienie zliczania co 0,05sek setkiEQU 07Bh dziesiatkiEQU 07Ch jednostkiEQU 07Dh flagiEQU 020h org 0000h...
Skoro ustawiłeś bit CTC1, to sprawdź w dokumentacji, do czego on konkretnie służy.
A masz ustawione odpowiednio fuse ? Mój Make: # Name: Makefile # Project: hid-data example # Author: Christian Starkjohann # Creation Date: 2008-04-07 # Tabsize: 4 # Copyright: (c) 2008 by OBJECTIVE DEVELOPMENT Software GmbH # License: GNU GPL v2 (see License.txt), GNU GPL v3 or proprietary (CommercialLicense.txt)...
co napisaliscie jako swoj pierwszy program na dany uC w danym jezyku (rozbudowy sie licza, byle by wciaz byla to ta sama baza) n. n. - literka, cyferke z przodu dodam sam. zachowujcie chronologie w swoich dokonaniach na roznych platformach jezykowych i sprzetowych, tak aby to mialo sens! ____________________ 0x1-a. Freddie Chopin - migacz diodkami o...
Prosiłbym o pomoc w rozumieniu tego programu ponieważ chce wiedzieć jak to działa i również chodzi o sprawdzenie tego programu bo w jednym programie do symulacj pokazuje brak instrukcji a w drugim błąd w linii Tim0. Z góry dzięki [syntax=asm]T0_G EQU 0 T0_C EQU 0 T0_M EQU 1 TIM0 EQU T0_M+T0_C*4+T0_G*8 T1_G EQU 0 T1_C EQU 0 T1_M EQU 1 TIM1 EQU T1_M+T1_C*4+T1_G*8...
Tak powinien wyglądać plik Makefile: # Hey Emacs, this is a -*- makefile -*- #---------------------------------------... # WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al. # # Released to the Public Domain # # Additional material for this makefile was written by: # Peter Fleury # Tim Henigan...
Może nie zignorowałem tylko programuję w Programmers Notepad stąd pewnych nieścisłości kompilator mi nie pokazuje:) Na pewno pokazuje. A dlaczego ie piszesz w oryginalnym Atmel Studio? 1. Zamieściłem teraz u góry F_CPU To nic nie da - czytałeś wskazany artykuł? Zmień środowisko na oryginalne Atmel Studio: http://mikrokontrolery.blogspot.com/2011...
No wiec tak, te dwie rzeczy są takie same w obu twoich przykładach i ich nie zmieniałem: __main_stack_size = 0; __process_stack_size = 1024; Przedstawiam poniżej to co teraz mam w moim projekcie: STM32F103RC_rom.ld [syntax=c]/*****************************... * author: Freddie Chopin, http://www.freddiechopin.info/...
Witam. Jestem nowy na forum i nie mam zbyt duzego doświadczenia w programowaniu mikrokontrorów wiec z gory przepraszam za błedy. Otóż mam do napisania projekt w którym mam DS18B20i za nic w swiecie nie moge dokonać odczytu z czujnika. Analizowałem datasheeta dosc dlugo i nie widze błedu.Przegladałem również tematy na forum, próbowałem różnych rzeczy...
Witam. Właśnie staram się zrobić mysz komputerową na atmedze 32 za pomocą biblioteki V-USB. Program testowałem na płytce rozwojowej z kwarcem 16MHz, atmegą 32 i wszystko działało. Po przeniesieniu się na moją płytkę z kwarcem 12MHz i przekopiowaniu kodu, na wyjściach D+ i D- mikrokontrolera nic się nie pojawia, D- stan wysoki, D+ niski. Oczywiście zmieniłem...
Ok, coś jest nie tak. Przede wszystkim systick działa na trybie optymalizacji O1 i O2. Bez zmiany kodu. Na O0 od razu jest hard fault. Ale nie występuje na żadnej linijce kodu. Nie wchodzi do przerwania i wywala od razu błąd. EDIT: Działa w momencie kiedy wywaliłem inicjalizacje: N VIC_Init(&NVIC_InitStructure); A w to miejsce dałem: NVIC->ISER...
Zacznij od przerwania timera.
Muszę zrobić teraz taką rzecz, używając timera 1 mam poznać czas od momentu zgaśnięcia diody (tego podczas mrugania) do momentu naciśnięcia przycisku "1" wyłączającego mruganie. Następnie ten czas ma być zapisywany i co taki czas ma mrugać dioda Naprawdę musisz używać do tego celu aż dwa timery?
'do liczby 1536 trzeba by jeszcze coś dolożyć, na wykonanie instrukcji Zasadniczo nie trzeba nic dokładać, bo wartość timera jest inkrementowana sprzętowo od razu (w kolejnym cyklu maszynowym). Czyli już w trakcie obsługi przerwania. Jeżeli obsługa timera zmieści się w 255 cyklach maszynowych, to zmieniany jest tylko młodszy bajt timera - czyli w procedurze...
ten pic jest tak prosty, a wybor kompilatorow tak ograniczony (zerowy?), co wiecej - projekt tak prosty - ze najlepiej napisac te kilka linijek w assemblerze, bo to nic specjalnego. jeden timer i gotowe. 0x41 0x56 0x45!!
Czy mógłbyś wytłumaczyć działanie następujących linijek kodu: #pragma vector=TIMERA0_VECTOR __interrupt void Timer_A (void) w "wolnym tłumaczeniu" Linijka jeden: Adres kolejnej obsługi przerwania zapisany będzie we Flashu pod vectorem przerwania od Timera A0. Linijka dwa: Ta funkcja jest obsługą przerwania a więc powinna kończyć się na RETI a nie na...
Da się to jakoś zrobić ale to będzie musiała być niezła dłubanina w assemblerze. Trzeba wydłużyć długość Timerów do co najmniej 32b (a to tylko programowo się da). Dodano po 1 A mnożnik ma być stały czy ustawiany? Jak ustawiany to w jakim zakresie? I pytanie poza konkursem: do czego to?
Siema. Mam do napisania projekt (dsm) assembler " miernik refleksu , wykorzystać układ wewnętrzny timera ". Jak ktoś wie proszę pisać. Dzięki. Zamykam. - arnoldziq
A jakimi poleceniami sprawdza się stan znacznika timera, bo dopiero zaczynam z assemblerem i jeszcze niewiele wiem
d3zerter - no tak wspomniałem o tym, ale nie można tak uniwersalnie komuś podpowiadać, że nop trwa ok 1us bez odniesienia do częstotliwości taktowania jak sam teraz widzisz. Poza tym jak sam też widzisz nie jest to kwestia pamiętania jakichs parametrów procka na pamięć tylko obliczenia. A programując szczegolnie w asm trzeba być mocno "za pan brat"...
wpisz 0 przed każdą liczbą hex rozpoczynającą się od litery np #0FFH; Pozdrawiam
gdyby to było takie proste to nie pisałbym o tym na forum, ja potrzebuję czytać pozycje przy pełnej prędkości i to bezbłędnie bez żadnych przekłamań... Maksymalnie schrzaniłeś hardware, teraz to już Cię nic nie uratuje. Do zliczania trzeba było wykorzystać ten większy Timer, a do wykrywania zmiany kierunku przerwanie. Pięknie by to chodziło a procek...
Faktycznie zamieszczony program w asemblerze ma "walory edukacyjne" - nie ma w nim nawet jednego słowa komentarza! Dosyć istotną wadą tego projektu jest chwilowe załączanie przekaźnika w momencie włączenia zasilania...
kurcze, trudne zadanie. Mógłbyś podrzucić cały katalog projektu, tzn. bez rzeczy które chciałbyś zachować tylko dla Siebie. Chodzi mi o tą często zwaną 'rozbiegówkę'( nawiasem... świetna polska nazwa) w assemblerze i o 'startup' w 'C'. sam'a tylko na płaskich przerwaniach znam( bez priorytetów przerwań). Czy procesor wchodzi w to przerwanie? tu inicjalizacja...
- czy praca równoległych timerów nie będzie jakoś na siebie wpływać (program przerywa pracę na skutek działania timera1 by precyzyjnie wyznaczyć czas, a tu w tym samym momencie dochodzi kolejne przerwanie od innego timera, i co wtedy) Timery działają niezależnie, ponieważ realizowane są sprzętowo. Nie będą na siebie wpływać. Program niestety (w tym...
kolego, powyzsze watki mowia zeby wykorzystac czestotliwice procesora + licznik cykli, wszystko jest w winapi, wiec kontrolowane systemem win a jaki jezyk do tego uzyjesz jest bez znaczenia. jezeli upierasz sie na dos, to wiem ze kiedys mozna bylo wykorzystac timer 8253/8254 piszac procedure w asm, np: procedure Wait; assembler; {----------------------------------...
Zacznijmy od tego, ze za pomoca for w C nie da sie uzyskac dokladnego odliczania czasu! Przeciez w zaleznosci od optymalizacji (-O) i wersji kompilatora roznice beda siegaly tysiecy procent. Raz bedziesz mial 10Hz, a innym razem 0,01 Hz. Jesli chcesz w miare dokladnie odmierzac czas to albo korzystasz z funkcji z delay.h, albo piszesz wstawke w assemblerze...
Chyba to właśnie co znalazłem w źródłach. Deklaracja funkcji przerwania nie może mieć atrybutu Interrupt("FIQ") skoro mamy już wrapper w assemblerze. Tak jak pisałem, spróbuj z __attrybut__((naked)) albo wcale. Jeśli zadeklarujemy to jako FIQ to kompilator dodaje kod odejmujący 4 od adresu powrotu, co my już robimy we wrapperku.
<ciach> V-USB wymaga aby przerwania były blokowane nie dłużej niż ~25 cykli. Czyli w tym przypadku występuje problem ze zbyt długim przerwaniem timera w bibliotece "IR". Najprościej byłoby odblokować przerwania w ten sposób: Zbędne wyciąłem, bo logicznie kłóci się z kolegi postem. :)
Witam !! Dopiero zaczynam się uczyć assemblera mikrokontrolerów rodziny 51. Chcę aby przysłowiowa diodka mrógała mi co 0,5 sekundy i nie wiem jak spowodować takowe opóźnienie w assemblerze, z tym że nie używając do tego celu timerów. załóżmy że procesor będzie taktowany z częstotliwością 12 MHz. Jak powinien wyglądać podprogram realizujący opóźnienie...
atmega timer assembler timer counter assembler assembler timer counter
schemat kabli minijack czujnik pralka imobilajzer astra
delphi ds150e programy wkrętarka milwaukee
Schemat ustawienia łańcucha rozrządu Renault Trafic III 1.6 dCi R9M – znaki, blokady, narzędzia Testowanie triaka BTA10 z optotriakiem MOC3020