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...
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.
Aha - w opisie zapomniałem podać, że oczywiście trzeba też ustawić częstotliwość nadawania/odbierania wpisując odpowiednią wartość do rejestru A680h.
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?
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ść...
Witam czy ktos moze mnie oswiecic w jaki sposob zapisac wartosc do rejestru Counter1 pod bascomem ? Mam taki prosty program i za nic w siecie bascom nie che go lyknac $regfile = "Attiny26.dat" $crystal = 1000000 Config Timer1 = Timer , Prescale = 64 On Ovf1 Czas Enable Interrupts Enable Timer1 Counter1 = 120 Do nop Loop Czas: nop Return...
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.
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...
.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.
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 ] :)
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...
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?
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 .
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...
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...
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...
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...
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
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.
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...
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...
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ść...
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...
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 ?
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...
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...
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ż...
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...
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.
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...
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...
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.
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, 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ę
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...
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...
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...
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...
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
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...
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
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...
Mając trochę wolnego czasu napisałem parę funkcji do obsługi układu PCF8583. Funkcja która ustawia godzinę i datę zapisuje też dane potrzebne do obliczenia pełnego roku, dzień tygodnia jest obliczany automatycznie na podstawie daty. Funkcje Pcf8583_write i Pcf8583_read można wykorzystać do zapisywania/odczytywania danych z wolnej pamięci ram. Dostępne...
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...
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 :)
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...
Musisz za pomocą I2C zapisać do rejestru o adresie 00H wartość z najstarszym bitem(bit CH) o wartości 0.
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......
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
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ą...
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ć...
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ć...
Wartość rejestru CKSEL wynosi 0011 dla zegara wewnętrznego 8Mhz, 0010 dla 6,4Mhz. Sprawdź w manualu.
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)
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?
Poczytaj w helpie do Bascoma by ZbeeGin o maskowaniu, ustawianiu i zmianie na przeciwną wartość bitów. Albo w podręczniku do C. | w C to jest OR w Bascomie. AND XOR w Bascomie to nie pamiętam jak jest w C. Bierzesz stan DDRB jaki jest już ustawiony. Do zmienna1 wpisujesz co potrzebujesz. Piszesz: zmienna2=zmienna1 AND DDRB DDRB=zmienna2. I tak jak napisała...
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 może lepiej zastosować Timer1 w trybie 14. Częstotliwość regulowana wartością rejestru ICR1, a wypełnienie OCR1A.
Dzisiaj na stronie elportalu znalazłem komentarz na temat bascoma i ATtiny. Bascom nie obsługuje prawidłowo ATtiny. Start Timer0 czy stop Timer0 nie działa (przynajmniej dla ATtiny2313). Trzeba wpisać do odpowiedniego rejestru właściwą wartość żeby timer wystartował itp. Trzeba się zapoznać z dokumentacją. Rejestry sterujące timerami są podzielone na...
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.
Ostatnią przetworzoną wartość można także odczytać ze specjalnej zmiennej ADCD która odzwierciedla stan rejestrów ADCL i ADCH. zmienna=ADCD to również jest w helpie :)
Moi drodzy, po co kłótnie, Po co wasze swary głupie, Wnet i tak zginiemy w zupie! Może krótko i merytorycznie wyjaśnię Bascom`owe podstawy a zacznę od komend Set i Reset. Otóż potrafią one ustawiać tylko jeden bit na raz. Jeśli numer bitu nie jest wskazany to zawsze będzie to bit numer 0. Dlatego wskazane piny portów PINx, PORTx, DDRx i inne ustawiają...
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...
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ą...
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?
Odnośnie pytania A do czego służą wstawki asemblerowe i czy są konieczne? Tiny13 ma tylko 64bajtów SRAM Mikrokontroler nie potrafi bezpośrednio zapisać wartości do zmiennej. Kiedy więc ma ustawić w zmiennej 20ms wartość 1 to musi najpierw załadować wartość 1 do jakiegoś podręcznego rejestru a potem wyładować te wartość do zmiennej 20ms. Rejestrów jest...
bascom rejestr bascom rejestr przesuwny rejestr przesuwny bascom
dziwi trybie awaryjnym linux środowisko graficzny huawei setup
kamerą termowizyjną pralka polar
Kod błędu P0230 w Peugeot 206 2.0 HDI - diagnoza i rozwiązania Radio samochodowe nie odtwarza kaset - przyczyny i rozwiązania