Tak jest możliwe. Skoro otrzymujesz za duży czas to zmniejsz wartość wpisywana do timer0 (nie znam bascom więc nie wiem za co który rejestr odpowiada wartość wpisana do timer0, aczkolwiek 40kHz otrzymasz bez problemu).
W instrukcji CONFIG SERVOS jest taki parametr jak RELOAD = xxx. Liczba xxx określa jaki czas w us będzie pomiędzy kolejnymi przerwaniami licznika taktującego generator PWM dla układów serwa. I będzie to rozdzielczość tego układu. Zatem jeśli wpiszesz 10 to SERVOS(1) = 100 da nam 100x10us = 1ms impuls powtarzający się co 20ms na wyjściu podłączonym do...
To tylko opóźnienie. DJNZ zmniejsza zawartość rejestru R7 i skacze do etykiety Et1, aż wartość tego rejestru będzie równa zero. W bascomie można użyć instrukcji waitus 40 w tym przypadku będziesz miał opóźnienie 40 us
tak - takimi programikami można sprawdzić, i wartość należy zawsze wpisać do rejestru przy starcie każdego programu. To jest rejestr w pamięci RAM a nie EEPROM. Nie jest to też Fusebit. Dodano po 2 ale wiesz co? ja bym na twoim miejscu sprawdził ten procek z kwarcem = 8MHz czy przypadkiem się nie okaże że jednak też nie działają wyższe prędkości. Może...
Aha - w opisie zapomniałem podać, że oczywiście trzeba też ustawić częstotliwość nadawania/odbierania wpisując odpowiednią wartość do rejestru A680h.
No to spróbuj - zmienną wysyłasz jak normalną wartość, w Bascom ustawienie bitów w niej będzie się odbywało tak samo jak majstrowanie z rejestrami PORTn.x.
Zamaskować nieużywane bity rejestrów przechowujących czas. Nie możesz zakładać, że one mają wartość 0 - w praktyce mają wartość losową.
Należy: - zadeklarować zmienną globalną np. LICZNIK i nadać jej wartość zera, - włączyć przerwania od przepełnienia Timer0, - w funkcji przerwania należy zwiększać wartość zmiennej LICZNIK o jeden Aby poznać liczbę impulsów wystarczy pomnożyć LICZNIK*256 i dodać do niego aktualną wartość rejestru licznika timera, czyli jak sądzę counter0 (nie znam BASCOM).
Witam W tym rejestrze tylko dwa bity dadzą się zmienić i przy okazji odpowiadają one za rozdzielczość więc wpisanie do rejestru wartości 63 dzisiętnie lub 3F hexadecymalnie załatwia sprawę. -- pozdrawiam
W trybie power down są zachowywane rejestry procka. Niech WDT budzi procka co 2 sekundy i zwiększa wartość wybranego/wybranych rejestrów.
Tryb CTC należy ustawić zgodnie ze stroną 112 PDF. Należy dokładnie przeczytać tę stronę i okoliczne. Potem ustawić odpowiednie bity w odpowiednich rejestrach. W Bascomie robi się to np. tak: set TCCR1B.wgm13 i tak dalej. Bascom nie ma gotowych instrukcji na wszystkie możliwe tryby pracy timerów. Ale pozwala na ustawienie tych trybów "ręcznie"- przez...
Mam jeszcze jedno pytanie - czy przed przełączeniem PINB.1 z rejestru PORTB.1 na OC1A istotna jest wartość w rejestrze PORTB.1?
Drogi kolego jest coś takiego jak "Help" w bascom i jest on bardzo przejrzysty. Tak na logikę. Deklarujesz Timer1 jako timer a wpisujesz wartość do countera? Nie dziw się że wywala błąd. Spróbuj "Timer1 = 120".
W dokumentacji MCP2515 :D . Chcę tylko zaznaczyć, że ta wartość wyliczona preskalera to nie jest wartość którą masz wpisać do rejestru konfiguracji preskalera. Do rejestru wpisuje się o jeden mniej. Czyli jak częstotliwość chcesz dzielić przez 10 to do rejestru wpisujesz 9. W załączniku masz akrusz excela do przeliczania wartości rejestru preskalera.
Hm, spróbuj zmienić enable timer na start timer. Ewentualnie spróbuj wpisać odpowiednią wartość bezpośrednio do rejestru - bascom ma problemy z obsługą pwm w niektórych procesorach (prawdę mówiąć jest tylko kilka, w których PWM działa wszędzie gdzie powinno i jak powinno). A znaczniki code to [code ] i [/code ] :)
.Czy ktoś może wie w czym tkwi problem/spotkał się z taką sytuacją? A zmienna, której wartość kopiujesz do OCR3A/PWM3A nie jest przypadkiem zadeklarowana jako BYTE ? Jeżeli to nie to, to spróbuj zapisywać rejestry OCR3 osobno - OCR3AH, OCR3AL.
Powtórna inicjalizacja (sygnał START) wymagany jest tylko w momencie w którym Master zapisuje do układu adres rejestru z którego następnie chce odczytać wartość (FIG. 17 z dokumentacji). W przykładzie z pierwszego postu powtórna inicjalizacja podyktowana była "cechą" układów na I2C - automatyczna inkrementacja licznika rejestru. Jeśli wpisujesz wartość...
A nie lepiej tak ? Przykładowa konfiguracja timera1 w trybie CTC i przebiegiem na OC1a [syntax=basic4gl]Config Timer1 = timer, Prescale = 256, CLEAR TIMER = 1, Compare A = toggle, Compare B = disconnect [/syntax] Potem tylko zmieniać wartość rejestru Compare1a jakimiś przyciskami, pilotem, enkoderem etc. ps. Jak nie zadziała to poustawiać bity w rejestrach...
1. Zmienna jest typu word bo żeby przy aktualnych ustawieniach zmierzyć ~750ms trzeba zliczyć 2900 przerwań. Poza tym obsługa tej zmiennej jest poza obszarem wyłączenia przerwań i i tak zajmuje parę taktów uC. 2. Nie po to używamy timera żeby jego zadania wlepiać do pętli głównej 3. Load Timer0 może mieć sens z wartością bliską 0, np. 5, bo wtedy do...
W każdej wersji da się zmienić prędkość przecież to nic innego tylko wpisanie odpowiedniej wartości do rejestrów i można to zrobić z poziomu bascoma lub wstawki asemblerowej .
Już z wypowiedzi z pierwszego postu wnioskowałem sobie coś o Twojej osobie. To jednak zostawię. Żeby procesor odliczył poprawnie 500ms za pomocą funkcji Waitms to trzeba mu podać rzeczywiste taktowanie uC a nie takie jak Ty myślisz że masz albo chciałbyś mieć. To z tego powodu że przy taktowaniu 1MHz zegar musi tyknąć 500 000 razy a dla taktowania 8MHz...
Witam To mnie Kolega zaskoczył - jeśli chodzi ilość wysyłanych bajtów Wzorowałem się na [url=http://forum.mikroe.com/viewtopic.p... stronie, co prawda w C, ale można zobaczyć, jak tam to jest zrobione, tzn. pierwszy MAX7219 - konfiguracja przez dwa bajty ( rejestr + wartość ) drugi MAX7219 - konfiguracja przez cztery bajty ( rejestr +...
A jak slave ma wpisać tę wartość do rejestru? Jakim poleceniem?
zasadniczą różnicą jest to, że przez rejestry jest możliwe adresowanie pośrednie, czyli wartość w rejestrze wskazuje adres danej, są to rozkazy z (at)
"Config Timer1 = Timer , Prescale = 8 , Compare A = Toggle , Clear Timer = 1" Przy tej konfiguracji to chyba nigdy nie wejdzie w przerwanie od Timer1. Gdy osiągnie Compare1a = 600 to dzięki poleceniu Clear Timer = 1 licznik zostanie wyzerowany. A przerwanie Poz: jest uruchamiane dopiero po przepełnieniu licznika. Ale ja nie mam zaufania do konfiguracji...
Robisz prosty błąd w składni. Poczytaj w helpie o Load. Nie tak: [syntax=basic4gl]Load Timer1 = jakas_wartosc[/syntax] tylko tak: [syntax=basic4gl]Load Timer1 , jakas_wartosc[/syntax] Z tego co pamiętam można również tak. przykładowo: [syntax=basic4gl]Timer0 = 249[/syntax] co jest równoważne: [syntax=basic4gl]Load Timer0 , 6[/syntax] Ale to sobie musisz...
Chcę napisac własny program z wykorzystaniem Timerów. Na początek proszę o wytłumaczenie dlaczego w poniższym programie: 1. wykorzystano podzial częstotliwości zegara (po preskalerze 256) 250/125 zamiast wykonac jedno dzialanie? 2. uzyto wartość początkową Timera0 = 250 przed Petlą do Loop End . O ile wyjaśnienie podane przez Tomq jest błędne(!) Load...
Witam. W podprogramie do zapisu zegarka nie określiłeś zmiennej Tm(5). Wprawdzie nie używasz jej ale jest zapisywania zgodnie z pętlą. System wstawia wartość domyślną co zakłóca wartości rejestrów zegarka. Wstaw : Tm(5) = 1
Mam nadzieję że pin WP nie "zmasowany" bo powinien być ewentualnie podciagnięty do VCC. One mają "smart pull-up" to znaczy, że potrafią wyłaczyć wewnętrzny włączany automatycznie gdy wykryją zwarcie wejścia do GND by oszczędzać energię. W sumie mądre. Wiadomo tyczy tylko zapisu do eeprom i rozruchu po POR/BOR, ale kto wie jak Ty to sprawdzasz. Żeby...
Taki oto kod nie działa: [syntax=basic4gl] $regfile = "m32def.dat" $crystal = 16000000 'Config Timer2 = Timer , Async = Off , Pwm = Off , Prescale = 256 Timsk = &B01000000 Tccr2 = &B00000111 Enable Timer2 Enable Interrupts On Timer2 Przerwanie Do Print "obsluga programu" Loop End Przerwanie: Print "obsluga przerwania" Return [/syntax] Szczerze mówiąc...
W Bascomie nóżki konfiguruje się przez Config Portx = input/output - dla całego portu Config Pinx.y = input/output - dla jednej linii Sugerowałbym zatrzymać licznik przed załadowaniem do niego wartości. W nocie można znalźć info, że mogą pojawić się przypadkowe wartości w rejestrach przy zapisie na pracującym liczniku.
Prosty program zmieniający z częstotliwością 0,5Hz stan końcówki PXY raz jako zwarcie z masą (logiczne zero) wmuszone stanem rejestru PORTX.Y, a po sekundzie wystawiający na końcówkę PXY wysoką impedancję. Fakt, jedynką ustawiasz masę, a zerem ustawiasz wysoką impedancję. Z tym chyba sobie poradzisz. [syntax=basic4gl]PORTX.Y = 0 'Wartość rejestru PORTX.Y...
Równą częstotliwości jaką dostaje od prescalera. Tylko w jakim celu skoro taka sytuacja nigdy nie wystąpi? Wartość którą wyrzuca adc to 512+-320, potencjometr jest mechanicznie ograniczony. Jak wpiszesz wartość 512+320 do 8 bitowego rejestru ?
Błąd kompilatora. Po wykonaniu Config Timer0 nie jest zapamiętywana bieżąca zawartość rejestrów TCCR0x wewnątrz kompilatora. Przy wywołaniu Start Timer0 odtwarzana jest wartość 0 w rejestrze TCCR0B, a powinno być wpisane 5. Zgłosić do działu wsparcia i czekać na poprawienie. A tymczasem zamiast START i STOP: skonfigurować licznik, zapamiętać zawartość...
szeri88 , miałem dokładnie taki sam problem, z tym że w innym ATTINY. Na przykład żeby ustawić Vref=1.1V nie możesz niestety przypisać wartości w taki sposób: REFS0=1 ponieważ BASCOM tego nie kupi. Trzeba podać nazwę rejestru, do którego należy bit, czyli: ADMUX.6=1 To powinno zadziałać. Pozdrawiam Przemotronik
W opcjach/programmer jest parametr Port Delay. Spróbuj zwiększyć wartość w okienku. Jeden z kolegów na forum zaleca zmiany w rejestrze Windows. Odszukaj jak się to robi. Jam mam programator bez tych mas i tylko czasem pojawi się jakiś błąd. Długość kabla od programatora do uC 0,5m. P.S. To, że się zna Bascom to nie znaczy, że nie można nauczyć się "C"...
Gratulacje. Jeszcze nie raz się natniesz na te różnice. Na AT90S2313 powstało mnóstwo programów i fajnych urządzeń. Ale już go nie robią i jego następcą jest ATtiny2313. Ściągnij ze strony Atmela pełne datasheety obu procesorów i wydrukuj sobie register summary z obu. Porównaj. Bascom 1.11.9.1 nie "widzi" niektórych różnic. Ale jak wpiszesz wartość...
Jeśli dalej używasz choćby jednej zmiennej typu Bit to nadal pomysł jest aktualny bo bitów zawsze jest osiem. Jeśli nie, to mozna wygospodarować jedną zmienną typu Byte, ale że Tiny13 to bardzo wymagający uC i mozesz już nie mieć więcej miejsca na Byte to możesz pojechac po bandzie i do przechowywania wartości wykorzystać jakiś nieużywany rejestr :D...
Wojtek - wchodzisz tutaj: [url=http://www.frank-zhao.com/cache/avr... z kalkulatorem 16MHZ z preskalerem 1024 oznacza że: - 1 sekunda nastąpi po 15625 cyknięciach timera - przerwanie następuje przy przepełnieniu jeśli wybierzesz OVERFLOW, ale może tez nastąpić przy COMPARE, od tego zależy jaką wartość wpiszesz do timera (czy odejmiesz...
W PDF jest napisane, że flaga jest zerowana gdy : "interrupt routine is executed". Ja to tłumaczę jako obsługa przerwania jest WYKONANA. CZYLI po ZAKOŃCZENIU. W PDF jest też napisane, że zerujemy ją wpisując do rejestru wartość na określonym bicie 1.Czyli EIFR.0=1. Dlatego wpisując EIFR.0=0 NIE ZEROWAŁEŚ FLAGI!. Spróbuj ja wyzerować następująco If EIFR.0=1...
Tak. Może być i w wysokim poziomie, ale takie będzie o wiele szybsze a w dodatku zajmie mniej miejsca a nie chciałem Ci zajmować swoimi poprawkami całego FLASHa w procku. In R16, Wyswietlacz1 '<-- R16 = PortD andi R16, &B00001111 '<-- R16 = R16 And &B00001111 Lds R17, {Wyswietlacz1_2} '<-- R17 = Wyswietlacz1_2 !or R16, R17...
Ldi R30, 28 Ldi R31, 78 Rcall _lcd_delay ; 20 ms delay at 4 MHz Witam, przedstawiony kod asemblerowy jest niezmiernie prosty w edytowaniu i zmienianiu parametrów instrukcji. Ldi - jak każdy wie, to ładowanie odpowiedniej wartości do rejestru Rcall - wywołanie programu. _lcd_delay: Sbiw R30,1 ;2 cycles Brne _lcd_delay ;2 cycles Ret Sbiw - instrukcja...
Po prostu dlatego że twórca BASCOMa nie zrobił takiej możliwości. Inaczej można to zrobić bardzo prosto: wpisując nową wartość do rejestrów UBRRH I UBRRL (kolejność wpisywania jest ważna). Oczywiście wpisywaną wartość trzeba wcześniej obliczyć bo w takim wypadku BASCOM już jej sam nie obliczy.
To jest procedura zapisu do rejestru sterującego zapisem/kasowaniem strony pamięci odpowiedniej wartości. Współdziała z procedurą Writepage: z której jest wywoływana. Ma za zadanie albo ustawić rejestr na zapis strony przesłanymi danymi albo ją odblokować po operacji zapisu albo ją skasować przed zapisem albo odblokować po skasowaniu.
O ile dobrze zrozumiałem idee to cyklicznie negujesz wartość poprzednio wpisną do portu. Nie znam AVR ale może to być taki przypadek jak w 51 , Ustawianie portu polega na wpisaniu wartości do rejestru, ale odczyt następuje z pinów procka. Podciągając lub nie pin rezystorem do +Vcc a sterując zerem, to nawet ustawienie pinu na zero przy odczycie zwróci...
Witam! Po pierwsze to z reguły przyciski powinny zwierać piny wejściowe do masy a nie do zasilania. Wynika to z faktu posiadania przez procesory AVR wewnętrznych rezystorów pull-up podciągających wejścia do +vcc, czyli panuje na nich stale stan wysoki (oczywiście gdy zostaną uaktywnione). Po drugie to akurat sygnał CLK ma się zmieniać, podczas narastającego...
Teraz tu jest sprawdzany bit if(PINC & 0x08) a jak zastosuje && to cały rejestr jest porównywany z cyfrą 8 czy tak? Jak zastosujesz && to dla PINC różnego od zera będzie: "if(TRUE AND TRUE) " W przypadku wyrażeń logicznych wartość TRUE ma każde wyrażenie różne od zera. A z tym 13-impulsem to jakaś "magia"? :) Bez sygnału 38kHz TSOP będzie głupiał.
Witam i dzięki za zainteresowanie problemem, ale niestety nie może (99%) to być wina potencjometrów i przetwornika. Wykasowałem odpowiednią cześć kodu ale zrobiony był jeszcze podgląd wyników na wyświetlaczu. Dodatkowo aby wyeliminować małe wahania wyników dziele je przez 4. Co do tego rozjeżdżania to to wygląda tak że ustawiam jakąś wartość wypełnienia...
Witam, Jak w temacie - czy ktoś już tym zajmował albo tworzył coś podobnego? Potrzebuję wykorzystać do tego celu Mega32. Modbus RTU Master po RS485. Odczytać kilka rejestrów ze slave i przedstawić wartości na wyświetlaczu.
Naprawdę nikt nie jest w stanie nic pomoc ? Miało by to mniej więcej wyglądać tak: -sygnał podawany na ICP ma postać kwadratową -zbocze opadające powoduje zapis wartości timera do rejestru sprzętowego -odejmując kolejne wartości rejestru od siebie uzyskuję czas jaki upłynął między impulsami -obliczając odpowiednio czas uzyskuję ilość impulsów na minutę
Pierwsza rzecz o którą mi chodzi to czy można odczytać stan całego portu za pomocą PINx? np. IF PINB = &B00000001 THEN Tak, można. Druga sprawa jeśli np. jeden z tych pinów jest ustawiony jako wyjście to jaką wartość będzie miał dany bit przy odczycie? Nie ma znaczenia czy jest jako wyjście czy jako wejście. Odczytując rejestry PINx odczytujemy aktualny...
Zrób to tak: [syntax=basic4gl] $regfile = "m8def.dat" $crystal = 4000000 Config Timer0 = Timer , Prescale = 256 'onfiguracja timera, przescaler 256 On Timer0 Odmierz_1s 'włączamy timer0 Dim Licz_8ms As Byte 'definiujemy zmienną pomocniczą Dim Sekundy As Byte Enable Interrupts 'włączamy zezwolenie na przerwanie Enable Timer0 Load Timer0 = 125 'ładujemy...
Wystarczy atmega8 która posiada 4 kanały PWM. Do każdego kanału podłączasz mosfeta i wentylator. Wpisujesz do odpowiedniego rejestru pożądaną wartość i tyle... Po co bawić się w bramki...
Masz ATmega8, czyli masz ADC i masz timer połączony z pinami I/O, czyli za pomocą timera możesz generować przebiegi na wyjściu. Rzecz wręcz banalna. Za pomocą ADC wykonujesz pomiar napięcia. przeliczasz go na okres, albo odrazu częstotliwość, nie wiem jak to w bascomie wyglada. W każdym razie częsottliwość ustala się przez zapisanie w odpowiednim rejestrze...
To chyba tytułem różnicy rejestrów PINn i PORTn wszystko zostało powiedziane. A w temacie - czułość układu zależy od wielu parametrów: 1. rozmiary pola dotykowego 2. wartość rezystora "pomiarowego" 3. prowadzenie ścieżek między procesorem a polem (na kabelkach wyniki są mało powtarzalne - wystarczy przesunąć kabelek o parę mm bliżej/dalej innego i już...
Nie tędy droga, Ty musisz zrobić coś dokładnie odwrotnego - nie wygenerować sygnał, ale go zmierzyć. Rozwiązania są 2, ale jeśli programujesz w bascomie i nie masz ochoty na operacje na rejestrach w procesora to kurczą się do jednego. Mianowicie: 0. ustawiasz timer na zliczanie impulsów i zmianę wartości jakiejś zmiennej - parametry dobierz w zależności...
Sprawdź zawartość Rejestru TCON jaką wartość reprezentuje IT0, na Bascomie się nie znam ale takie programiki NIE MOGĄ NIE DZIAŁAĆ. Posprawdzaj rejestry odpowiedzialne za system przerwań może globalne komendy zmieniają coś więcej niż byś chciał. Sprawdź Rejestr zezwoleń na przerwania i priorytetów.
ZEWRZYJ ZNACZY ZEWRZYJ!!! NIE DIODA! DRUT!!! Ludzie!!! Ehh sorry... Niedługo będę pisał mówiąc ustaw (wpisz w odpowiedni rejestr wartość ustawiającą) Boze...
Witam Wszystkie szczegóły odnośnie transmisji masz na stronie 6 w postaci graficznej. Bardzo ładnie wszystko widać. W pierwszej kolejności ustawiasz pin CS i LDAC w stan wysoki a SCK w stan niski. Żeby rozpocząć transmisję do układu (DAC) ustawiasz stan niski na wyjściu CS następnie na wyjściu danych SI ustawiasz najbardziej znaczący bit dwunastobitowego...
Nie wiem czy zda to egzamin, ale mozna by było zastosować licznik BCD i dopiero jego wyjścia połaczyć z 74141. Mozna też ładować odpowiednie wartości do rejestru procka-&B...... Twozysz tabele z której procek pobiera wartości i wpisuje je do rejestru. Pozdrawiam
witam jak w temacie, czy bascom obsluguje tylko single end'ed czy takze wej roznicowe adc? bo w help nie widze :((( pzdr. Skoro brak bezpośredniej funkcji , to nic nie stoi na przeszkodzie , by odpowiednie wartości wpisać do rejestrów mikroprocesora i mierzyć ... :) Piotrek
Że help istnieje to ja wiem, niestety dalej nie moge dojść jak to zrobić. At90s2313 ma sterować transceiverem, ma 6 odddzielnych linii na porcie PD0-PD6 do skonfigurowania rejestrów transceivera. W jaki sposob w rejestrze o adresie 00110 wpisać ustawić 6 i 7 bit na 11 jeżeli ten rejestr posiada odddzielną linią sygnałową podpięta do portu PD0? Ja myślałem...
Instrukcja Wait nie stopuje procesora. Procesor odlicza czas poprzez zmianę wartości rejestrów a więc działa. A skoro działa to powinien także odczytać informację, że nastąpiła sygnalizacja od przepełnienia Timera. Spróbuj zastosować tą instrukcję. Tylko nie wywołuj jej w obsłudze przerwania a w pętli głównej. Bo gdybyś wywołał jej obsługę w przerwaniu...
Wczytałem sie dokładniej w dokumantację i teraz widzę jakie głupoty popisałem poprzednim razem :-) Mam nadzieję że teraz już załapałem. W TINY13 są dwa rejestry konfiguracyjne do TIMER0: TCCR0A=COM0A1 , COM0A0 , COM0B1 , COM0B0 , - , - , WGM01 , WGM00 TCCR0B=FOC0A , FOC0B , - , - , WGM02 , CS02 , CS01 , CS00 Jak sądzę, żeby CTC działało na wyjściu OC0A...
Jednak kod z Else wykona się szybciej, zajmie mniej cykli. Przy każdym If-ie kompilator musi umieścić zmienną do rejestru żeby ją porównać z zadaną wartością. .... Zapomniał kolega o optymalizacji interpretatora. Nie wiem jak obecnie, ale BASCOM jak się jeszcze nim interesowałem obydwie interpretował i optymalizował identycznie. Kolego sprawdź :D
Gdzies juz chyba widziałem, jak napisałeś coś w stylu, że "ogólnie wiadomym jest, że bascomowe SPISLAVE nie konfiguruje tak jak potrzeba" . Ja o tym czytałem pierwszy raz... Mogę wiedzieć której wersji Bascom używasz jeśli nie najnowszej 2085? W SPI najważniejsze jest to, że to master taktuje slave`a. Dlatego nie bez powodu w komendzie konfiguracyjnej...
czy tak trudno zerknąć do helpa PWM1A = wartość zmienna = PWM1Aalias rejestru Compare 1A licznika TIMER1 (Word) używany gdy licznik pracuje w trybie PWM PWM1B = wartość zmienna = PWM1Balias rejestru Compare 1B licznika TIMER1 (Word) używany gdy licznik pracuje w trybie PWM PWM2 = wartość zmienna = PWM2rejestr Compare 2 licznika TIMER2...
Jeśli masz sterownik do silnika i potrzebujesz tylko dir i enable to raczej nie steruj go przez PWM. Potrzebujesz generatora o zmiennej częstotliwości zrobionego na procesorze. A nie o zmiennym wypełnieniu impulsów. To się nazywa rampa. Powinna być używana zarówno przy starcie jak i hamowaniu silnika. Wypełnienie powinno być stałe albo dawać krótkie...
Pomijając fakt, że sam pomysł jest dziwny ... to powinno to działać tak jak planujesz. Kierunek portu (wartość rejestru ddr) możesz zmienić w dowolnym miejscu programu, nie tylko w deklaracji na początku. Czyli na początku programu deklarujesz pinb.1 jako wejście, zerujesz pinb.1 (reset). W programie sprawdzasz co jakis czas czy pinb.1 jest ustawiony...
Przecież masz 5 kanałów - wyjścia: OC1A, OC1B, OC2, OC3A, OC3B... Zmienne przedstawiają wartość modulacji w każdym z kanałów z osobna. Wszystkie PWMy są skonfigurowane jak 8 bitowe zatem zakres to 0..255. Ma tak być. Ponieważ nie ma aliasu (jeszcze) PWM2 dla zmiennej COMPARE2 (rejestr sprzętowy OCR2), BASCOM nie rozpoznaje nazwy PWM2. Jak zajrzysz w...
Witam. Czy może mi ktoś powiedzieć co robię nie tak. Tak - nie czytasz dokumentacji... :twisted: Przecież próbujesz zapisywać/odczytywać dane do/z jakiegoś innego układu niż Twój AD5933 ;) Jego adres do zapisu to &H1A , a do odczytu &H1B (adres podstawowy &B0001101 plus bit kierunku 0 = write, 1 = read ). Stoi o tym jak byk w dokumentacji na str. 25......
Nie pisze w BASCOM, tylko w assemblerze i działa to tak: Do określania co jest wejściem a co wyjściem służy rejestr DDRn [n - litera portu]. Więc jeżeli chcesz mieć pierwsze dwa piny jako wejście, a dwa następne jako wyjście w porcie B ustaw: DDRB 0xC [binarnie 1100] Ustawiając PORTB zmieniasz stan pinów portu. Rejestr PINBx [x jakaś cyfra] odpowiada...
To nie Bascom jest przyczyną tylko źle napisany program ;). 1. odczyt timera1 16bit odbywa się po przez rejestr pomocniczy TEMP, ten rejestr jest też używany przez inne procedury i funkcje i jeśli jest użyty to właśnie niszczona jest wartość High timer1 bo ona tam jest wpisana gdy używasz komendy. wpisując tak timer1 do tablicy możesz gubić High timer1....
Nic nie trzeba informować kompilatora - Bascom ładnie przyjmuje wprost rozkazy asemblera ale w zasadzie atom1477 zrobił to nawet bez asemblera - sorki - po prostu "ręcznie" odwołał się do rejestrów i wpisał do nich odpowiednie wartości tzn poustawiał bity tak żeby coś tam działało w tym przypadku co ja ci podałem trza by to było mniej więcej zrobić...
Musisz za pomocą I2C zapisać do rejestru o adresie 00H wartość z najstarszym bitem(bit CH) o wartości 0.
W moim przypadku oczywiście PWM będzie się zmieniał w zależności od wartość z przetwornika A/C, który jest 10 bitowy, a więc PWM będzie też miał wartość 10 bitową. Jak więc będzie wyglądał wtedy zapis w rejestrach OCR3al i OCR31h?
Przecież masz już swój kod, trzeba tylko na jego podstawie dorobić fragment. Wystarczy, że dodasz tam wysyłanie odpowiedniej(nich) wartości do odpowiedniego(nich) rejestru(ów), wykonasz raz, usuniesz kod i tyle. Później powinno śmigać do następnego zaniku zasilania. EDIT: Nie zdążyłem. Pamiętaj, że o ile nie ma zaniku zasilania, to należy to wykonać...
Już se poradziłem w inny sposób. Przechowuje wartość temp max i min w zmiennej sramowej, która codziennie o północy jest resetowana. Uzyskałem w ten sposób pomiar dobowy, który mi wystarcza. Temat uważam za zamknięty.
Wartość rejestru CKSEL wynosi 0011 dla zegara wewnętrznego 8Mhz, 0010 dla 6,4Mhz. Sprawdź w manualu.
Ten kod musisz okrzesać :D Czym to programujesz? Pytam bo umieściłeś dyrektywy dla programatora. Może i nie byłoby w tym nic dziwnego, ale w kodzie masz napisane 8MHz a tymi dyrektywami mikrokontroler zostałby ustawiony na fabryczne 1MHz... Inna sprawa to ten pomiar na ADC i zapisywanie jego wyniku po obliczeniach do PWM. Nie wszystkie tryby PWM mają...
No więc widzę, że muszę zacząć grzebać w rejestrach, żeby najpierw wpisać wartość pinu, a potem przełączyć kierunek, bo w bascomie "configiem" chyba się nie da łatwo... No to nadszedł czas na krok do przodu --> C :)
ale jest procesor jak w temacie postu czyli: 89c52, aby skompilować program na ten procesor, musisz otworzyć plik (zdaje się z rozszerzeniem dat) np. 8951.dat i dodać brakujące rejestry, ich adresy i wartości początkowe... Pozdrawiam JarGol
Ja uczyłem się na poniższym kodzie: W tym kodzie jest mały błąd, a mianowicie wartość wpisana do rejestru OCR1A, powinna wynosić: crystal/prescaler-1
No to jak się zastanawiałeś nad tym, to powinieneś zaskoczyć o co chodzi... Po prostu należy najpierw wyłączyć maskowanie roku i dnia tygodnia (więc zamiast 8 do rejestru 0 wpisać wartość 0), potem odczytać cały bajt, zamaskować niepotrzebne bity w danym bajcie: najpierw rok i odczytać dzień miesiąca, potem zamaskować dzień miesiąca i odczytać rok -...
Nikt tu nie dodaje "licznika". Timer2 jest przez BASCOMa traktowane na równi z TNCT2. A przynajmniej powinno być. Tak samo jak można napisać: Timer2 = 100 i to nie zapisze wartości 100 do "licznika", tylko konkretnie do rejestru TCNT2.
Może tak może nie, ale przecież zczytywanie pinów, także zajmuje określoną ilość cykli, więc może da się je uwzględnić podczas generowania przebiegu, Np sprawdzać te piny zaraz po ustawieniu portów wyjściowych generatora, a odświeżać rejestry nowymi wartościami częstotliwości w następnym cyklu programu ddsscore?
Instrukcja out wykonuje się w jednym cyklu, tylko jest mniej uniwersalna bo operuje na całym porcie. Ale jak podejdzie układowo to wystarczy przygotować w dwóch rejestrach wartości i wysyłać je naprzemiennie.
Witam wszystkich Dopiero zaczynam programować w języku asemblera (w szkole mam programowanie mikrokontrolerów 8051 w tym języku), wcześniej programowałem w Bascomie. Chcą trochę poćwiczyć asemblera przed zaliczeniem napisałem prosty program który wpisuje do pamięci o danym adresie i do jakiegoś rejestru jakąś liczbę. I mam takie dwa pytania przy zaadresowaniu...
A czy zauważyłeś , że 2-ga linia Twojego źródła (tam gdzie wstawiłem znaki zapytania) "nic nie robi" :?: Zamiast: zmienna_long |= (zmienna_byte <<2) & 3; mógłbyś napisać: zmienna_long |= 0; lub tę linię pominąć , bez żadnego wpływu na wartość "zmienna_long", bez względu na wartość "zmienna_byte" :wink: Wynikiem operacji ... (zmienna...
PCF8583 nie ma rejestru roku tak jak PCF8563. Co do dnia tygodnia - muszę poszukać w DS. EDIT: Dzień tygodnia musisz odczytać z rejestru miesiąca (06). Służą do tego bity 7..5 czyli: 1. odczytać rejestr 06 2. zamaskować wartość za pomocą AND &B11100000 3. przesunąć w prawo o 5 (Shift Rejestr_06 , Right, 5)
Po pierwsze który to Bascom i jakie są wartości $hwstack, $swstack i $framesize w IDE bo stamtąd je bierze jeśli nie umieścisz tego w kodzie. Na przyklad jesli nie użyjesz Nosave to Bascom potrzebuje około 32B na odłożenie rejestrów i wykorzystuje do tego $HWstack. Do tego w przerwaniu masz Lookup() który potrzebuje kolejne cztery bajty. Jak masz za...
A może lepiej zastosować Timer1 w trybie 14. Częstotliwość regulowana wartością rejestru ICR1, a wypełnienie OCR1A.
Masz jeszcze jedno (chyba najprostsze) rozwiązanie. Widzę że używasz uarta. Zrób sobie pętelkę która będzie zwiększała zmienną , wpisywała ją w rejestr timera, wysyłała ją przez uart, i czekała np 500ms. Patrz kiedy układ będzie miał największy zasięg i spisz sobie wartość timera, lub kilka wartości i średnią wylicz.
Napięcie referencyjne nie ma nic do tego - zapewne GETADC zwraca wartość rejestru ADC. To ty musisz przeliczyć uzyskaną wartość na napięcie wiedząc jakie masz napięcie referencyjne. No i skoro się dopiero uczysz to ucz się C, a nie jakiejś egzotyki typu BASCOM.
Witaj, No save spokojnie możesz użyć.... pod warunkiem, że nie korzystasz w obsłudze przerwania z instrukcji Bascoma bo jeśli tak to nie odkładając rejestrów na stos, zgubisz ich wartości i w najlepszym przypadku będą się działy różne rzeczy. Ja bym napisał wstawkę w asemblerze odkładając wcześniej na stos używane rejestry w tym SREG. Możesz też użyc...
a co zostaje wczytane do rejestru gdy wysyłasz te wartości? Może faza sygnału zegarowego jest odwrotna i nie wczytuje pierwszego bitu?
Mozna wszystko nieco uprościć: 1. Podączamy linie to INT0 i INT1 (bez zian) 2. T0 zlicza czas w tybie 16-bitowym (bez dodatkowej pętli) 3. w momencie wykonania przerwania z T0 impulsy zostaje zczytana wartość z rejestrów odpowiedzialnych z kanałów z INT0 i INT1 4. potem jakas procedura potrzebana do wizualizacji danych no i skok do 1 z uprzednim wyzerowaniem...
Prawidłowo robi się to tak: XH , YH , lub ZH . Kolejnym krokiem jest odczyt młodszej części adresu i odpowiednio przepisanie jej do XL , YL , lub ZL .
Te dwie linijki przed pętlą while to konfiguracja interfejsu SPI mikrokontrolera. Rejestry SPCR i SPSR służą do ustawiania parametrów transmisji. Szczegółowy ich opis jest w datasheecie do mikrokontrolera (strony 141 - 143). Wartości jakie wpisane są do rejestrów determinują następujące warunki transmisji : - Wyłączone przerwania od SPI (bit SPIE w...
Taz40 --> w Bascomie możesz także spokojnie przestawić programowo podział taktowania przez 8. Służy to tego: CLKPR – Clock Prescale Register zajrzyj do noty PDF. Domyślnie wartość podziału jest właśnie w nim ustawiona na 8 - gdy załączony jest CKDIV8. ale spokojnie w trakcie działania programu można to także przestawić - zapisując odpowiednią...
bascom rejestr przesuwny rejestr przesuwny bascom bascom początkowa wartość
halogen zamiast żarówki odblokować karte naprawa sterownika turbiny
mikrokomputer cobra1 napęd bramy przesuwnej
Nafta a kompresja w silniku: czy to działa? Schemat układu AGC-0071RF w radioodbiornikach Nissan