http://elecrom.wordpress.com/2008/02/12/... Pierwszy lepszy help o portach w AVR ci to wyjaśni. (Poczytaj o różnicach między PORT a PIN).
Co mam poustawiać aby piny z tematu można było używać jako zwykłe wyjścia. Napisałem w bascomie taki prosty programik: Config Portd = Output Set Portd.3 Set Portd.4 Set Portd.5 Set Portd.6 Do loop I po włączeniu układu na pinach PD.1 (TxD) i PD.2 (INT0) mam cały czas 0 a na PD.3 i PD.4 mam 5 V. Jeśli natomiast usune linijki Set Portd.3 Set Portd.4 to...
Aby sprawdzić stan wejścia czyta sie PIND, a nie PORTD.
jeśli dobrze pamiętam to R/W powinno być do masy ( Portd.1 )
Bezpośrednio do masy można zwierać. Można to zrobić instrukcją set portd.5
Zamiast "Toggle Pind.7 " ma być: "Toggle Portd.7 ".
Proszę bardzo ;) Timer napędzany jest od systemowego taktowania. Jeśli każę mu policzyc do jeden i odwrócić pin to w pierwszym takcie zegara licznik Compare1a ma zero i pin nie jest odwracany ;) Dopiero za drugim razem pin jest odwracany. Z tego powodu że żeby mieć częstotliwość na pinie trzeba go raz mieć w stanie wysokim a raz niskim, a da się to...
zmień pind.0 na portd.0 (w obydwu liniach)
Cały program działa, obsługuje lcd mierzy przez adc i reaguje na zmiany napięcia na wejściu i tylko ta obsługa wyjścia nie działa bo jedno wejście działa. Podmienię na inną i zobaczę co dalej. Dodano po 1 Problem rozwiązał się po zmianie uC na inny prawdopodobnie uszkodzony procesor. Zamykam
Podciągnij wejście do plusa wewnętrznym rezystorem. Wejście T1 to PD5. [syntax=basic4gl]PORTD.5 = 1[/syntax]
A kto ustawi PORTD.1 jako wyjście?
// Sposoby zapisywania liczby binarnej 01011110 (94) // PORTD = 01011110; - liczba binarna // PORTD = 0x5E; - liczba hex // lub //PORTD = _BV(6)|_BV(4);- pojedyńcze bity 6 i 4 //--------------------------------------... // Przykłady: // PORTD = 0xaa; - 1010 1010 // PORTD = 0x55; - 0101 0101 // PORTD = 0xFF; - 1111 1111 //--------------------------------------...
Case 1 To 28 : set portd.0; set portd.1; set portd.2; set portd.3; set portd.4; set portd.5; set portd.6; Po pierwsze bez srednika na koncu bo to nie C. Nie sadzisz ze lepiej by bylo wpisac np. PORTD = &B11110000.
źle się wyświetlają, bo są źle zdefiniowane. Jedynka od siódemki powinna różnić się jednym segmentem, a u Ciebie różni się pięcioma. Definicje 7, 8 i 9 są błędne. A poza tym - wrzuć definicje cyfr w tabicę stałych i wyżwetlaj jedną instrukcją, bez switch() PORTD = ~cyfry[i];
mam pytanko czemu jeżeli pisze tak jak kolega tłumaczy portd.0 = portd.0 * 2 to kompilator w tym widzi błąd? chyba że to źle interpretuje Bo musisz mnożyć zawartość całego portu. Jednego bitu nie możesz pomnożyć przez 2. Poprawne więc będzie portd=portd*2 A i jeszcze na początku wpisz do portd wartość 1 :P
To jak sprawdzasz to sprawdzaj w rejestrze PIND, a nie PORTD, w którym jest to co do niego zapisałeś.
W pliku lcd.h zamień: #define LCD_PORT PORTA na #define LCD_PORT PORTD na przykład.
1. napisz jakiego procesora używasz, bo w pierwszej chwili myślałem, że to któryś z serii 90s2313 lub tiny2313. W temacie... ;)
Proszę zatem o podpowiedź, co robią te linijki i jakie jest ich zadanie. if(PORTD = ~WYS_4) { PORTD = ~WYS_5; } if(PORTD = WYS_3) { PORTD = ~WYS_4; } if(PORTD = WYS_2) { PORTD = ~WYS_3; } if(PORTD = WYS_1) { PORTD = ~WYS_2; } Z góry dziękuję.
Operacje typu stała<<zmienna to niedobry pomysł, bo są bardzo kosztowne. W tym przypadku mamy zawsze przesunięcie w lewo/prawo o jeden bit, więc można użyć PORTD=PORTD<<1;
Nie wiesza się tylko nie zdążysz zobaczyć. ADC chodzi na tyle szybko, że instrukcje PORTD = 0xAA; PORTD = 0x55; Wykonują sie ale zaraz po nich wykonuje sie instrukcja PORTD = B2; i oko ludzkie tego nie wychwytuje
Piszcie ludzie na odpowiednich forach! Od tego jest forum Mikrokontrolery. _delay_ms(1000) masz opisane (w sumie nie jest trudno się po nazwie domyślić). A o operatorach bitowych (np. &) poczytaj sobie PORTD &= 0xAA to to samo co PORTD = PORTD & 0xAA
zmien konfiguracje portu 'Konfiguracja portów Config Portd.4 = Output 'Aliasy Enter Alias Pind.4 i powinno dzialac
Więc albo skasuj ten temat (poproś moderatora bo już nie możesz), albo napisz rozwiązanie dla potomnych.
1. To w ATMega8 PORTD.2 MUSI być ustawiony na 0, inaczej MAX485 chce nadawać, a nie odbierać. 2. Wywal te oporniki 610 omów (R5 i R7). 3. Sprawdź czy masz A jednego układu z A drugiego połączone, to samo dotyczy B. 4. Jeżeli przewodu nei masz conajmniej kilkanaście/ kilkadziesiąt metrów wywal chociaż 1 z tych oporników 120 omów. 5. Połacz procesory...
musi być drugi wait po zmianie bitu [syntax=basic4gl]Do Portd.0 = 1 'zapal diode Waitms 200 Portd.0 = 0 'zapal diode Waitms 200 Loop [/syntax]
Hej, Przedtem sprawdziłem tylko czy działa przetwornik. Dla pełni szczęścia ustaw jeszcze bit ADLAR w ADMUX (strona 205 pedeefa dla ATmega8). W przeciwnym wypadku bedą Ci migać co najwyżej dwie najmłodsze diody portu D. Jeżeli diody masz podłączone do VDD to mozesz zanegować ADCH (PORTD = ~ADCH) aby mieć zgodność świecenia diód z wartością ADCH. Pozdrawiam
W Twoim programie masz: ...E = Portd. 5... Pomiędzy Portd. a 5 masz spację. To samo: Portd. 4- też spacja. Program się kompiluje- a bzdury wyświetla. Sprawdziłem właśnie. Czy to pomoże na kontrast- nie wiem. Sprawdź.
hmm :>
Kolego robisz błąd w instrukcjach warunkowych if sprawdzasz tam stan PIND w twoim przypadku powinno być PORTD.
Wpisz do $crystal taka wartosc jaka masz. Jezeli masz fusy na wew generator to wpisz 1MHz. Set Pind.1 Set Pinc.1 Set Pinb.5 BZDURA! Ile można powtarzać? Rejestr PORTX służy do wystawiania 1 lub 0 na port. Rejestr PINX służy do sprawdzania stanu danej końcówki portu. Rejestr DDRX służy do ustalenia czy port ma być wyjściem czy wejściem. Czyli zamiast...
Spróbuj tak: $regfile = "m8def.dat" $crystal = 8000000 Config Portd.7 = Output Portd.7 = 0 Config Clock = Soft Time$ = "12:40:00" Enable Interrupts Do If _min = 41 Then '60s później włącza przekaźnik Portd.7 = 1 End If Loop End
Zastanawiam się jeszcze nad tym gdzie jest pind.0 a gdzie portd.0 bo zawsze miałem z tym problemy. napewno : Config pind.0 - input set portd.0 natomiast w warunku to nie pamiętam, czy portd.0 czy pind.0 ale raczej portd.0. Jak coś to zapraszam na gadu-gadu, no chyba, że chcesz sobie punktów "ponabijać" - nie mam nic ptrzeciwko :-)
Błąd! Powinno być: DDRC = LED_1; Domyślnie wszystkie linie są wejściami, więc nie trzeba nic robić z DDRD dla przycisku, za to być może należy mu ustawić podciąganie w PORTD.
Widzę że bez gotowca się nie obejdzie. Chodzi o to: SIGNAL (SIG_OVERFLOW1) { stan++; stan &= 0x03; switch (stan) { case 0: PORTD = 0x08; //Włącz PD.4 break; case 1: PORTD = 0x04; //Włącz PD.3 break; case 2: PORTD = 0x02; //Włącz PD.2 break; case 3: PORTD = 0x01; //Włącz PD.1 break; } TCNT1 = 0xFF00; //Przeładuj...
6941560200_1426611911|2CzVFDZXUE Witam, Mam problem z obsługą przetwornika A/C. Po umieszczeniu w Atmega8 programu: [syntax=jezyk_programowania] /* * odczyt.c * * Created: 2015-03-15 17:07:13 * Author: PC */ #define F_CPU 8000000L #include <avr/io.h> #include <util/delay.h> /*Co ważne, konwersja nie dokonuje się błyskawicznie, bo przetwornik...
.... problem wynika z tego, że pin powinieneś podciągać do vcc, inaczej cały czas masz stany nieustalone czyli dodaj do inicjalizacji: DDRD &= ~(1<<PD3);//pin jako wejście PORTD |= (1<<PD3);//podciąganie wewnętrzne
A gdzie masz polecenie Start Timer0?
Na szybko napisany kod $regfile = "m8def.dat" $crystal = 1000000 Config Portb = &B11111111 Portb = &B11111111 Config Portc = &B00111000 Portc = &B00000000 Config Portd = &B11111111 Portd = &B11111111 Do 'pętla nieskończona Portd.0 = 1 'zaświeć lampkę Wait 1 'czekaj 1 sekundę Portd.0 = 0 'zgaś lampkę Wait 1 'czekaj 1 sekundę Loop End 'koniec...
A helpa do CVAVR kolega czytał ?? W Mega8 dla LCD obslugiwanego ze standardowych bibliotek masz tylko dwa adresy: #asm .equ __lcd_port=0x18 ;PORTB #endasm #include <lcd.h> lub #asm .equ __lcd_port=0x12 ;PORTD #endasm #include <lcd.h>
PORTD = 00000000; _delay_ms(530); PORTD = 00000000; _delay_ms(530); daj w petli !!
PORTD =(PORTD & 0x08) ; Lepiej by było: PORTD&=~(1<<7);
Zastanów się dlaczego ten kod nie działa tak jak byś tego chciał . Zawsze stosuj taką konfigurację portów (tzn. taki typ zapisywania) Widzisz dokładnie jak masz ustawione poszczególne końcówki portów Config Portb = &B11111111 'jako wyjścia Portb = &B00000000 'stan początkowy niski Config Portc = &B00111000 'jako wyjścia i wejścia Portc = &B00000000...
kurcze mi nie wychodzi :| timer chodzi co 1s ale reszta do kitu Dodano po 25 program chodzi :) oczywiscie musisz go przerobic na wlasne potrzeby dodac tyle ile chcesz przekaznikow i zmienic czasy w programie bo tam jest 10s i 40s ten program jest przygotowany pod ATmega8 i kwarc 8MHz $regfile = "m8def.dat" $crystal = 8000000 Config Pind.0...
Pisząc "podpiąłem programowo rezystor pull-up" miałem na myśli np. kod w BASCOMie - Set PORTD.0
Witam. Tak, masz racje powinno być tak jak opisałeś "config portd.0=output ' pin sterujący diodą LED'' Tak samo jak zapis warunków o których piszesz i jest prawidłowy. Przetestuj te zmiany i zobaczymy.
Ma gasić diodę na porcie PD3. Skompiluj poniższy program w CManiaku: http://mikrokontrolery.blogspot.com/p/cm... i zastanów się dlaczego działa inaczej niż oczekujesz. Chciałem się spytać czy funkcja Sonar_pobierz_pomiar w funkcji głównej ma prawidłowe zmienne? Otrzymujesz przecież ostrzeżenie: ../Proba_10.c:50: warning:...
bo nie masz wygaszania diodek: if (pomiar < 250) { PORTD |= (0<<PD5);//zapalamy pd5 PORTD &= ~(1<<PD6);//gasimy pd6 } else { PORTD |= (0<<PD6);//zapalamy pd6 PORTD &= ~(1<<PD5);//gasimy pd5 } delay_ms(10); PS. czemu nie używasz biblioteki util/delay.h...
Witam. Mam problem z sterowaniem wyswielacza LCD 2*20 (sterownik HD...) Zmień podłączenie sygnałów E i RS na PORTD(wynika to z kodu) , lub zmień kod , by "widział" te sygnały na PORTB. Piotrek
Pewnie nie zadziała 1) Stan przełącznika czytaj z rejestru PINC, a nie PORTC 2)zamaskuj 4 nieużywane starsze bity 3)wyrzuć ten cały switch, chyba wystarczy to: PORTD = znaki[PINC & 0x0F] Uwaga do sprzętu : rezystor na wspólnej anodzie niepotrzebny.
[syntax=c]PORTD|= 1<<PD0 ; [/syntax] jest tym samym co: [syntax=c]PORTD|= 0x1; [/syntax]
Set Portd.5 - będzie stan wysoki albo: Pind.5= 1 Toggle zmienia stan Pinu, u ciebie nie był ustawiony żaden stan.
OK, mam nadzieję, że zegar ustawiłeś w opcjach. Ponieważ muszę wyjść, to dam Ci wskazówki, a resztę wymyślisz sam lub koledzy pewnie podpowiedzą. Gdy pierwsze zbocze drgania styku ustawi flagę przerwania i mikrokontroler wejdzie w funkcję jego obsługi, to zaraz na początku automatycznie kasuje (w tym mikrokontrolerze) flagę przerwania. Ty w swoim programie...
Jakbyś zerknął do pliku nagłówkowego - iom8 -który załączasz pośrednio poprzez [syntax=c] #include <avr/io.h> [/syntax] To byś zobaczył definicje wyprowadzeń, np dla portu D którego używasz: [syntax=c] /* PORTD */ #define PD7 7 #define PD6 6 #define PD5 5 #define PD4 4 #define PD3 3 #define PD2 2 #define PD1 1 #define PD0 0 [/syntax] Jak widzisz...
Ja pierniczę. A ustawiłeś typ procesora? Ustaw na ATTiny2313 albo ustaw ATMega8 i pozamieniaj wszystkie PortA na PortD na przykład. PS. Fotografia ślubna? Rispekt ;p
1) kompilator wyrzuca jakieś błędy? aha, zdecyduj sie w jakiej notacji piszesz ;) nastaw sie na szesnastkowy Program po wykonaniu sie musi zwrócić wartość do systemu Wink (oczywiście tu go nie ma, ale to taki archaizm ze starych czasów Wink ) widać że programujesz w C, ale dla kompilatora AVR-GCC to return nie jest ważne, bo program nie powinien dojść...
#define PHASE_1 {PORTD|=0x02; PORTC|=0x08; } #define PHASE_2 {PORTD|=0x02; PORTC|=0x01; } #define PHASE_3 {PORTC|=0x10; PORTC|=0x01; } #define PHASE_4 {PORTC|=0x10; PORTD|=0x01; } #define PHASE_5 {PORTC|=0x02; PORTD|=0x01; } #define PHASE_6 {PORTC|=0x02; PORTC|= 0x08 ; } Zdaje się że Tu jest błąd, ale nie jestem pewien czy jedyny
Na początek przetestuj samo wyświetlanie podstawiając pod H i M odpowiednie wartości, a jeśli to nie pomoże to nawet pod A, B itd. Możesz pójść jeszcze dalej i zamiast Call Pobor_znaku umieścić Portd = &B...
Witam. Mam problem, Napisałem program ale nie działa tak jakbym tego oczekiwał. :cry: Config Portd.1 = Output , .... ........ Config Portd.1 = 0 , ..... Zauważ że cytowana wyżej linia druga zmienia wcześniejszą konfigurację portu z OUTPUT na INPUT. e marcus
Sprawdz kod czy nie masz glupiego buga. 1 w rejestrze wyjsciowym [portd.7=1] to tyko rezystor podciagajacy, musisz recznie w drugim rejestrze ustawic koncowke w tryb wejscia [config portd.7]
Kod BlueDarco już działa ale tylko w głównym programie int main(void) po każdej regulacji napięcia robię restart programu maint i wyśwetla mi poprawną wartość ale jak zmieniam to nic się nie dzieje ale to zrozumiałe bo muszę użyć pętli ciągłej np. while Nie wiem co jest nie tak ale nie wiem jak ten kod wstawić do ciągłej pętli jak już wstawiam to wyświetlają...
Jak najbardziej, licznik 2 ma wyjście OC2. Rejestr = _BV(cos); to przypisanie wartości, a Rejestr |= _BV(cos); to tak jak by Rejestr = Rejestr | _BV(cos); gdzie | jest bitową alternatywą. Taki zapis służy do ustawiania bitu numer cos, niezależnie od jego wartości i wartości innych bitów w tym rejestrze. OC2 jest na PB3, więc nie ma po co ustawiać PORTD...
A dlaczego konfigurujesz PORTA a nie PORTD?
$regfile = "m8def.dat" $crystal = 8000000 Config Portd = Output Config Adc = Single , Prescaler = Auto , Reference = Avcc Dim Przet As Word Dim Dziesiatki As Integer Start Adc Do Przet = Getadc(0) Dziesiatki = Przet / 127 If Dziesiatki = 0 Then Portd.0 = 1 Portd.1 = 1 Portd.2 = 1 Portd.3 = 1 Portd.4 = 1 Portd.5 = 1 Portd.6 = 1 Portd.7 = 1 Elseif Dziesiatki...
Z portu PIN sie tylko czyta a nie zapisuje . Zamień PINd.0=1 itp na Portd.0=1
Nie rozumiem po co dioda LED ukazująca stan nawiewu jest podłączona do osobnego pinu. Nie ma takiej potrzeby, a nawet jest to nie wskazane. Stan wejściowy pinu portu D, nawet kiedy w DDRD jest on ustawiony jako wyjście, można odczytać z rejestru PIND, natomiast wyjściowy z PORTD - tak, ten rejestr można również odczytywać. Nie programuję w Bascom, ale...
Błąd algorytmu ! Jeżeli jest prawdą DZ_FIRE i key_dz_fire==0 zerujesz liczniki i zapalasz diodę i ustawiasz key_dz_fire na 1. Oznacza to że w następnych przebiegach pętli głównej nie masz szansy dotrzeć do warunku if(fire_isr==dzialko) bo go odcina nie spełniony warunek if(key_dz_fire==0). Brak jest zerowania flagi DZ_FIRE żeby była szansa wykonania...
Witam Wkleję Ci przykładowy kod, reszta należy do Ciebie. $crystal = 4000000 $regfile = "m8def.dat" ' np. ATMEGA8 :) Config Lcd = 16 * 2 ' definiuje jaki wyświetlacz ma być podlączony Config Lcdpin = Pin , Db4 = Portd.5 , Db5 = Portd.4 , Db6 = Portd.3 , Db7 = Portd.2 , E = Portd.6 , Rs = Portd.7 ' podlączenie wyświetlacza do kontrolera...
#define WS_1PORTD &= (1<<PD1) #defineWS_0PORTD |= (1<<PD1) kolego nie tak #define WS_0PORTD &= ~(1<<PD1) #defineWS_1PORTD |= (1<<PD1)
Zamiast "Przekaznik Alias Pind.0" napisz "Przekaznik Alias Portd.0". Powinno pomóc.
Bo wszystko działa Ci za szybko. Zamiast: [syntax=c] PORTC = wyswietlacz1; PORTD = cyfra[cyfra1]; PORTC = wyswietlacz2; PORTD = cyfra[cyfra2]; [/syntax] daj na razie do testów: [syntax=c] PORTC = 0; PORTD = cyfra[cyfra1]; PORTC = wyswietlacz1; _delay_ms(1); PORTC = 0; PORTD = cyfra[cyfra2]; PORTC = wyswietlacz2; _delay_ms(1); [/syntax] A potem tak czy...
Wielke dzięki za pomoc. Pomogło dopisanie dwóch linijek: cbi(DDRD,PD0); sbi(PORTD,PD0); Pozdrawiam. Stefan.
Miałem kiedyś jakąś potrzebę na taki 8-o przyciskowy program dla attiny2313. Zamieszczam go w całości z komentarzami, może Ci się przyda: [syntax=basic4gl]$regfile "attiny2313.dat" $crystal = 1000000 '-- Config Portb = Input Portb = &B11111111 Config Portd = Output Portd = &B00000000 Config Porta.0 = Output Porta.0 = 0 Dim Nr As Byte 'licznik...
Generalnie w takich przypadkach nota układu twoim przyjacielem. Poczytaj to co napisałem w komentarzach. [syntax=c]#include <avr/io.h> #include <avr/interrupt.h> int main(void) { uint8_t i = 0; DDRD = 0xff; //TCCR2A |= (1<<WGM21)|(1<<WGM22); // źle ten tryb jest zarezerwowany TCCR2A |= (1<<WGM21) // CTC //TCCR2A |= (1<<CS20)|(1<<CS21)|(1<&l...
To coś jest nie tak, i to bardzo... Spróbuj zmodyfikować kod tak, on powinien działać... [syntax=c] DDRD = 0xFF; DDRC = 0; PORTC = 0; PORTD = 0; while(1) { PORTD = PINC; } [/syntax] A skoro napięcie spada, to może włącz pociągnięcie PORTC = 0xFF.... Jeżeli to nie pomoże, to piny atmegi mogą byś uszkodzone, podepnij czujnik pod POTRC.2, a wyjście na...
while(1) { PORTD = _BV(5); PORTD = _BV(6); PORTD = _BV(7); PORTB = _BV(0); PORTC &= ~_BV(0); } W ten sposób przez przypadek powstanie coś na wzór pwm na pinach. PortB będzie trzymał wartość, podobnie PortC, ale do PortD są 3 przypisania (nie ustawienia bitu), pierwsze przypisanie ustawi jedynkę...
A poza tym masz błędną obsługę wyświetlacza - cyfry z "duchami". Powinno być: PORTB |=wyjB; PORTD=tab[d]; PORTB &=~wyjA;
napisałeś: a pewnie chodziło ci o... [syntax=c] time = 5; while(1){ if(time==0){ PORTD=0xff; } } [/syntax]
set pind.3 set portd.3
PORTC.1 - 1wire PORTC.0,1,2 - multiplexowanie wyświetlaczy PORTD - segmenty
Ściągnij sobie z tej strony program kalkulator avr http://www.elportal.pl/index.php?module=... [syntax=basic4gl] $crystal = 1000000 $hwstack = 80 Config Timer1 = Timer , Prescale = 64 Dim Sek As Byte 's Enable Timer1 Enable Ovf1 On Ovf1 Czas Stop Timer1 Enable Interrupts Sek = 0 Do If pinc.0 = 0 then Load Timer1 , 49911...
Proponuję przy aliasach przycisków wpisać nie port a pin, bo to są wejścia. No i faktycznie aby stany na wejściach nie szalały podciągnąć wejścia do plusa. Moze być np. tak: regfile = "m8def.dat" $crystal = 1000000 Config Portd = Output Portd = &B00000000 Config Pinb.0 = Input Config Pinb.1 = Input Led1 Alias Portd.1 Led2 Alias Portd.2 S1...
[syntax=c] 21c21 < #define CLR_LCD_E PORTB= ~_BV(PB3) --- > #define CLR_LCD_E PORTB&= ~_BV(PB3) 40,41c40,41 < #define SET_LCD_D6 PORTD= _BV(PD7) < #define CLR_LCD_D6 PORTD= ~_BV(PD7) --- > #define SET_LCD_D6 PORTD|= _BV(PD7) > #define CLR_LCD_D6 PORTD&= ~_BV(PD7) 98c98 < --- > [/syntax] Obejrzałem 'po łebkach' Twój hd44780.h...
Wywaliłem wyłączanie tych 3 pinów przed pętlę. Masz wyświetlacz ze wspólną anodą, stąd włączenie diody następuje w przypadku podania zera na pin wyjściowy, do którego podłączony jest dany segment. Szkoda, że nie piszesz w komentarzach do instrukcji co według Ciebie ona wykonuje. [syntax=c] PORTD &= ~(1<<PD2); //włącz diodę na pinie PD2 PORTD...
(at)mpier to jeszcze napisz co jest złego w takim zapisie i czym się różni od: [syntax=c]PORTD=0; PORTD=4;[/syntax] albo [syntax=c]PORTD=0x0; PORTD=0x4;[/syntax] albo [syntax=c]PORTD=00; PORTD=04;[/syntax] jako znawca C powiedz mi które bity PORTD zostaną ustawione tym porzypisaniem [syntax=c]PORTD=010;[/syntax]
Tak na szybko: Nie: If Portd.2 = 0 Then Liczba = Liczba + 1 Tylko: If Pind.2 = 0 Then Liczba = Liczba + 1 Zamiast tej plątaniny: If Liczba = 0 Then Reset Portb.0 Set Portb.1 Reset Portb.2 Reset Portb.3 Reset Portb.4 Reset Portb.5 Reset Portd.0 Elseif Liczba = 1 Then Reset Portb.0 Set Portb.1 Reset Portb.2 Set Portb.3 Reset Portb.4 Reset Portb.5 Reset...
Może być np tak: $regfile = "m8def.dat" Config Portd = Output Portd = &B00000000 Dim D As Integer , D1 As Byte D = 0 D1 = 0 Do If D = 0 Then Portd = &B00000000 If D = 1 Then Portd = &B00000001 If D = 2 Then Portd = &B00000011 If D = 3 Then Portd = &B00000111 If D = 4 Then Portd = &B00001111 If D = 5 Then Portd = &B00011111 If D = 6 Then Portd...
Fredy tak, portD jest 8 bitowy Jest atmega8 atom1477, rzeczywiście to jest Ostrzeżenie. I da się to skompilować Ale dlaczego pojawia się taki błąd?
Ja mam podobnie napisaną obsługę enkodera i działa bardzo dobrze (Atmega8 enkoder EC11-1B-18T-L15 ). O ile ten enkoder daje taki same sygnały jak mój, to błąd masz tutaj: if (bit_is_set( PORTENCODER, ENCODER_B)) a powinno być PIND.
Sorry, wkradł się błąd. oczywiście chodziło mi o portd.1 Co jeszcze mże być nie tak?
Zmniejsz początkowe 10us na 3 us i skoryguj resztę czasów, a po każdym odczytanym bicie wstaw opóźnienie, 60 us powinno wystarczyć Dodano po 3 [syntax=c]int DS_READ ( void ) { int ret; //informuj o wysyłaniu bitu DDRD = 0xFF; PORTD = 0x0; _delay_us ( 3 ); //odbieraj bit DDRD = 0x0; _delay_us ( 3 ); ret = ( PIND & 0x1 ); _delay_us ( 60 ); return ret;...
spróbuj może podciągnąć rezystorem portd.5 zależnie od transoptora pod plus albo masę.
Użyj Timer'a 2 i wszystko będzie cacy. Pzdr. A piny to się konfiguruje tak: Config Pinb.1 = 1 a nie Portb.1. Przydaje się też wrzucenie linijki z def'em procka: $regfile = "M8DEF.dat", zresztą: $crystal = 8000000 $regfile = "M8DEF.dat" Config Timer2 = Timer , Prescale = 256 On Timer2 Przerwanie Dim A As Byte , B As Byte Config Lcd = 16 * 2 Cursor Off...
Ja się tam na BASCOMie nie znam, ale ten program to wyglada mi na generator liczb pseudolosowych ;) Weź się skup i zastanów co chcesz uzyskać. Kompletnie nie rozumiem, co Ty robisz z tym T. Co to ma reprezentować? Podpowiem, że jeżeli chcesz wyświetlić liczbę X z zakresu 0..99 na swoim wyświetlaczu, to byłoby to chyba coś takiego (zakładając, że wyświetlacz...
[syntax=c]int main(void) { DDRD = 0b01100000; PORTD = 0b01000000; while(1){} }[/syntax] Dioda świeci.
No i problem wygląda na rozwiazany, to co powodowało niedziałanie ww układu to fakt, ze w przerwaniu od UART nie pobierałem znaku z buforu, przez co flaga nie zostawała wyzerowana i kolejne znaki nie były odbierane... Innymi słowy powinno być tak: Port: A=InKey() Toggle portd.6 Return
Zamiast : "Db4 = Pd.7" spróbuj Db4 = PORTd.7
Po co ustawiasz portd.4 na wejscie Hi-Z? Ustaw tak: PORTD = PORTD or &h10 Wtedy podsiągasz ten pin do plusa i nie musisz ustawiać tam jedynki w podprogramach. Przerób A na BIT, po czym Program: Portc.4 = 0 'jedna dioda zapalona Portc.5 = 1 'druga dioda zgaszona toggle a Return Program2: Portc.4 = 1 ' dioda zgaszona Portc.5 = 0 ' dioda zapalona...
daj częstotliwość na 8000000. Gdzie podłączasz diodę? btw Config Portb = Output Config Portc = Output Config Portd = Output to jest nie potrzebne
Witam ! W tych liniach są błędy: pind 1 .0=1 napisz tak: Portd.1=1 ' itp. Pozdrawiam. Stefan
portd atmega8 atmega8 dioda portd atmega portd
żywica zalać tuner comag turbina galaxy
Troubleshooting Delphi Autocom 2021.11 Activation Issues Rok produkcji pralki Bosch WAA16161PL - jak sprawdzić?