Nie kombinuj tylko w inicjalizacji ustaw bit LED w DDRC i PORTC.
Ta gałąź z wyłącznikiem jest dość nieszczęśliwie zrobiona... cóż... Jeśli nie zależy Ci na pewności działania a LED nie jest biały ani niebieski podłącz do portu A.0 rezystor pull-down sporej wartości, wyzeruj bity DDRA.0 i PORTA.0. PINA.0 może zostanie ustawiony po przyciśnięciu przycisku. Ale nie na pewno, bo producent gwarantuje stan niski dla napięć...
IN data, PINC . W końcu interesuje Ciebie to co jest na pinie wejściowym, a nie to jak skonfigurowałeś rejestr PORTC.
Port C ustawiłeś jako wejście. W miejsce zer wpisz jedynki, następnie Portc=&B00000000
Ta instrukcja nie robi NIC: PORTC |= (0<<PC5);
W takim razie musisz robić jakiś błąd w kodzie, pokaż jak to odczytujesz.
[syntax=basic4gl] Out1 Alias Portc.0 Out2 Alias Portc.1 Out3 Alias Portc.2 Out4 Alias Portc.3 [/syntax]
Portc i Portc.4 zamień odpowiednio na Pinc i Pinc.4.
Hi, Po pierwsze ustawiasz kierunek portu dla PC1, a gdzie ustawienie dla PC4? Nawet jeżeli po resecie jest ustawiony jako wejście to dobrym zwyczajem jest go ustawić tak jak należy. Po drugie w najprostszym wypadku to co chcesz zrobić: [syntax=c]if( !(PINC & KEY) ){ /*jezeli stan niski to...*/ PORTC |= RELAY; _delay_ms(10000); _delay_ms(10000); PORTC...
Witam. Mam krotkie pytanie, na ktore nie znam odpowiedzi i prosze o pomoc. Czy PortC w Atmedze8 moze byc JEDNOCZESNIE wykorzystywany jako np. wejscie dla przycisku oraz jako przetwornik ADC? Problem mam taki, ze pod PortC mam podpiete kilka interfejsow, miedzy innymi termometr na 1Wire (PC1) oraz wlasnie przetwornik ADC (na linii PC0). I nie jestem...
Avcc podłączone? :)
Nie ma innego wyjścia, jak pozmieniać wszystkie zapisy do portu C tak, aby zmieniały tylko potrzebne bity np. PORTC = (PORTC & 0xf0) | 0b1100;
Aha, operacje tego typu: PORTC&=(0<<5)+(0<<4); nie przynoszą efektu takiego jaki oczekujesz. 0 się nie przesuwa bitowo w C. W praktyce ta komenda zostanie zrealizowana tak: PORTC &= 0; Powinieneś napisać tak: PORTC &=~((1<<5)+(1<<4));
Nie, pin RESET jest odpięty od normalnego drivera do momentu przeprogramowania fusebitu RSTDSBL. Jeśli jego nie ruszysz to zmiany wartości DDRC i PORTC nie mają dla tego pinu znaczenia.
A gdzie konfiguracja Portc.5 jako wejście?
Wstaw delay także pomiędzy PORTC=0x3F; PORTC=0x0; // binarnie: 000000 O tak: PORTC=0x3F; _delay_ms(1000); PORTC=0x0; // binarnie: 000000
Witam ! Zrób tak: If Czas > Roz Or Czas < Zak Then Portc.5 = 1 Else Portc.5 = 0 End If
ten program dziala na attiny? sproboj usunac portc=output
Z tego co napisałeś nie wszystko wynika, ale prawdopodobnie wystarczy zmienić: PORTC = 0x0f na PORTC = 0xff.
Witam ! (at)emarcus Dziękuję za wyjaśnienia. Pytałem o portC ATmega8 bo chcę pobawić się posiadaną płytką NE406-k, a tu mam LCD podłączone do poru C, część do portu B. https://obrazki.elektroda.pl/5435745300_... 30 albo i więcej lat leżała ta płytka u mnie, przyszedł czas żeby się nią pobawić. W sieci szukałem gołych płytek które by...
Masz błąd w obsłdz przerwania. Dokładnie w tych liniach: [syntax=c] if (l==1) PORTC |= PC5; else if (l==2) PORTC &= ~PC5; [/syntax] Prawdopodobnie chodziło Ci o: [syntax=c] if (l==1) PORTC |= (1 << PC5); else if (l==2) PORTC &= ~ (1 << PC5); [/syntax] Albo cała obsługe przerwania można zrobić prościej tak: [syntax=c] ISR(TIMER1_COMPA_vect)...
Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5 Zapisz to w jednej linii.
Wyrzuciłem z obsługi przerwania pętle opóźnijące: SIGNAL(SIG_INTERUPT1){ if(bit_is_clear(PINC,PC5)){sbi(PORTC,PC5... else cbi(PORTC,PC5); } Niestety nic nie pomaga. Nadal nie działa. Nie działa , bo ... kompilator nie wie ,co to za wektor SIG_INTE R UPT1.Gdybyś napisał SIG_INTE RR UPT1 , to by wiedział :D Piotrek PS Odpowiednikiem powyższych "zabiegów"...
Możesz czytać zarówno PORTC jak i PINC. Temat brzmi PINC służy do odczytu stanu PINU .
Przekaznik Alias Pinc.5 powinno być alias portc.5;) Tutaj mamy 3 rejestry do obsługi portu, nie jak w 51 1;P
1. Połącz AVCC z VCC oraz GND-GND. PORTC jest zasilany z tych niepodłączonych linii... 2. Pomiędzy VCC i GND kondensator 100nF
Chyba tak w BASCOMie [syntax=basic4gl]Config Portc = Input Portc = 0 [/syntax]
Na razie włącz wewnętrzny oscylator na 8MHz. Jak programujesz a pomocą BASCOMa, to w FuseBitach powinno być ustawione "Internal RC oscillator 1MHz" (w innych środowiskach tez tak będzie ustawione ale nazwane to będzie inaczej). I zmień to na 8MHz. I nic więcej nie ruszaj. W ATMega8 rezonator 32768Hz powinien być podłączony do nóżek PB6 i PB7. a one...
Tak bardzo ogólnie bo od AVR nie jestem ekspertem i jak wygląda entry point musi ktoś inny opowiedzieć. Piszesz tutaj kod w assembly, dając kilka dyrektyw. Na bazie tego kompilator wypluwa OPCODE. W tym wypadku używasz dwóch instrukcji ustawiających PINC0 jako wyjście oraz PINC0 w stan wysoki. DDRC i PORTC są aliasami dla pewnych adresów w przestrzeni...
Zamiast portc.5 = 0 powinno byc pinc.5 = 0. Porty sluza jako rejestry wyjsciowe, piny jako rejestry wejsciowe. Powinienes jeszcze dodac rezystor podciagajacy, ustawiajac portc.5.
Biblioteka której użyłeś nie ma możliwości dowolnej konfiguracji pinów. W załączniku masz bibliotekę prosto z Rosji :D Chiński wyświetlacz sam mi się uszkodził ale coś tam wyświetla :D http://obrazki.elektroda.pl/6257086800_1... Kod którego użyłem do zrobienia tego zdjęcia [syntax=vbnet] $regfile = "m8def.dat" ' specify the used micro...
A port PC0 ustawiłeś jako wejście a nie wyjście. Wydaje mi się że wszystko robię dobrze Ustawiam linie PC0 jako wyjście nadając wartość 1 dla najmłodszego bitu czyli 0b00000001 = 0x01 i tak mam zapisane DDRC = 0x01 oraz ustalam stan niski PORTC = 0x00; Witam. Nigdy tak nie rób - anoda lub katoda po do pinu, anoda lub katoda do GND lub Vcc (zależy czy...
A jak myślisz , co się dzieje z Twoimi diodami po wykonaniu poniższej instrukcji :?: [syntax=c]PORTC=0x00;[/syntax]
config portc = &11111110 portc = &11111110 powinno pomóc
Najpierw podłącz AVCC i AGND odpowiednio. Bez tego portC jest źle zasilany. Potem wklej to: $regfile = "m8def.dat" $crystal = 1000000 Config Lcd = 16 * 2 Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5 Cls Do 'Locate 2 , 2 Lcd "TEST PROGRAMU" wait 1 Loop End
W pewnym moim projekcie musiałęm wykonać sprawdzanie stanu wyprowadzeń zewnętrzych PORTU C. Program jest bardzo prosty. wystawiam na PORTC same jedynki i kabelkami zwieram wyprowadzenia portu do masy. Zależnie od tego który kabelek odłącze od masy program wykonuje żądaną instrukcje. Długo nad tym myślałeś? Przecież w ten sposób zwierasz (przez tranzystor...
Mam to w programie Odłącz pin R/W od mikrokontrolera i podłącz bezpośrednio do masy.
Może i się wzorowałeś, ale wyrzuciłeś 8 rezystorów z katod i dałeś 4 na anodach, co jest błędem. Na tym schemacie w anodach nie ma rezystorów. Zamień tę linijkę: PORTC=~(1<<i); na PORTC= 1<<i; Bo masz odwrotne sterowanie wzmacjniaczy anod.
I pomyśleć, że chodzi po prostu o: PORTC = (i == 2) << 5; ;)
Podwieś linie SDA i SCL do Vcc przez rezystory 4.7 k i będzie OK i dopisz do programu następujące linie: Config Scl = Portc.5 Config Sda = Portc.4 oraz I2cinit Pozdrawiam...
Kompilujesz mega8, a w io.h jest undef dla porta/ddra itp. w przypadku mega8 :) Po prostu ten procek nie ma portu A. PortC jest ograniczony.
Proponuje tak while(1) { if(PINB & 0x01 ) { PORTC ^= _BV(5); _delay_ms(100); } }
Witam Oto prosty przykład: $regfile "m8def.dat" $crystal = 8000000 Config Lcd = 16 * 2 Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5 Cls ' kasowanie wyświetlacza Lcd " TEST " ' wyświetli TEST Lowerline ' w dolnym wierszu Lcd " OK " ' wyświetli OK stop
Jeśli nie ruszałęś FUSE BITS przy programowaniu ATmega8, to powinien pracować własnie z wewnętrznym zegarem 1MHz. Jak to spradzić? napisz takie porgram w ASM: sbi DDRC,0 ;PORTC.0 jako wyjscie tu: sbi PORTC,0 nop nop cbi PORTC,0 rjmp tu W wyniku działania programu na pinie PC0 powinieneś mieć F_ckl/6. o wypełnieniu 50%. Wystarczy zmierzyć. (PS. Fajniej...
Trzeba wtedy trochę pomanipulować operacjami bitowymi: [syntax=c] PORTC = (PORTC & 0b11110000) | (1 << PC0) | (1 << PC3); [/syntax] ta komenda po kolei: bierze aktualny stan portu C kasuje bity 0..3 (tzw. maskowanie) ustawia bity 0, 3 zapisuje wynik działania do PORTC Operacja jest rozbijana na więcej instrukcji ASM, ale w efekcie nie...
while(1) { AD(); //obsluga ADC if(ADC>630) { PORTC=0X00; //wlacza,wylacza diode TIMSK |=1<<TOIE2; //ZEZWOLANIE NA PRZERWANIE OD T0 } } } Moze tak?
#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
PORTC &= (0 << PC0); A co to za konstrukcja? Przesuwanie zera w ciągu zer? Jak chcesz wyzerować bit to rób to tak: PORTC &= ~(1<<bit); Poza tym: - źle ustawiasz MCUCR - brak aktywacji przerwań w GICR. Zamiast tego grzebiesz w nieistniejącym rejestrze (Atmega8) GIMSK. - brakuje w main zapętlenia przez co program zawiesza przerwania...
Dim Czas as Word Czas = 850 do Set PortC.1 Wait Czas Reset PortC.1 Wait Czas loop Pozdrawiam P.S. Poczytaj do czego służy Alias. Nadaj alternatywne nazwy rejestrom a nie poleceniom języka.
Witam! Piszę w codevision program na ATmega8. Mam 4 przyciski podłączone odpowiednio do PORTC.5, PORTC.6, PORTB.6 i PORTB.7. Mają one służyć do regulacji dwóch parametrów. Problem jest taki, że te na PORTC działają OK, a te na PB nie. Podejrzewam że nie za dobrze napisany mam ten problem. Będę wdzięczny jeśli ktoś powie mi, jak pisać program obsługujący...
e ale tu mamy blad taki : Config Portc.5 = Input Config Portc.4 = Output Config Portb.0 = Output co jest zle! dobrze : Config Pinc.5 = input Config Pinc.4 = output Config Pind.0 = output
Witam , mam taki problem.Programowalem mikrokontroler... wszystko dzialalo ok, kilka razy go zaprogramowalem i dzialal. Dodalem cos do programu, zaprogramowalem i koniec, juz nie dzialal a programator go nie wykrywa juz... Programowalem codevision. To co dodałem to : Ustawienie Portc0..Portc5 jako wyj z wartoscia 1 i Portc6 jako wej wartosc T (code...
Spróbuj ten kod /nietestowany/ [syntax=c]unsigned int m; while(1) { switch( GetKeys() ) { case KEY_UP: if(!m ) { m = KEY_UP; } break; case KEY_DOWN: if(!m ) { m = KEY_DOWN; } break; case KEY_UP | KEY_DOWN: if( m == KEY_UP ) { // Operacje po nacisnięciu KEY_UP + KEY_DOWN PORTC ^= LED_PIN1; } if( m == KEY_DOWN ) { // Operacje po nacisnięciu KEY_DOWN +...
Jeszcze jedno pytanko: Chcę zrobić tak, że jeśli na port C.5 pojawi się sygnał to włączy się port C.4. Jak fizycznie to wykonać? Podłączyć 5V na nóżkę 5? Pozdrawiam A czy sygnał po zaniku napięcia na PORTC.5 stan wysoki na PORTC.4 ma zostać czy nie? Fizycznie - tak, trzeba podłączyć 5V, a w programie zrobić pętlę która sprawdza stan portu C. Oczywiście...
A jakie napięcie jest naprawdę na pinie procka ? Nie stosowałem internal . Na forum pisano , że były kłopoty. Moje ustawienie to : Config Adc = Single , Prescaler = 16 - ale dla mega8535 z podłączonym Vref do Vcc przez rezystor i zenerkę . Ale Ustaw jeszcze config PORTC.0 = input i PORTC= &B00000000 .
'Config Portc = Input ' Portc = &B0000000 ' Tow Alias Portc.4 'Q4 Alias Portc.0 ' Q3 Alias Portc.1 ' Q2 Alias Portc.2 'Q1 Alias Portc.3 zrób tak: Config Pinc.4 = Input Tow Alias Pinc.4 Config Pinc.0 = Input Q4 Alias Pinc.0 Config Pinc.1 = Input Q3 Alias Pinc.1 Config Pinc.2 = Input Q2 Alias Pinc.2 Config Pinc.3 = Input Q1 Alias Pinc.3 Eee.. a co to...
Ok, SPL <> SPH... i podłącz AVcc, skoro uzywasz PORTC. Tak w ogóle to poczytaj notę katalogową (oczywiście nie staraj się zapamiętać wszystkiego, raczej gdzie co jest omówione), bez tego to jak bez mapy na nieznanej drodze...
Rezystor podciągający oczywiście jest, 4k7 ohma Ustawiłem definicje w ten sposób: #define SET_1Wire {DDRC&=~(1<<(WE)); PORTC |= 1<<WE;} #define CLEAR_1Wire {DDRC |= 1<<WE; PORTC&=~(1<<(WE));} no to źle ostawiłeś, powinno być tak: #define SET_1Wire {DDRC |= (1<<WE); PORTC |=( 1<<WE);} #define CLEAR_1Wire {DDRC...
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...
Jtag jest na Portc.Aby go wyłączyć wybierz zakładkę fuse & lockbit - będzie tam zakładka jtag enabled - zmień na disabled - write fuse i po kłopocie. Pozdrawiam.
Wywal inicjalizacje uarta i wszystko co jest w while(1) - tak żeby była pusta pętla. Nie wiem co to jest timerinit. Jak nie jest on wykorzystywany przez kod serwa to też to wywal. Zacznij po prostu od czystego kodu serwa i jak on będzie działał ok to zacznij krok po kroku dodawać resztę. W zależności od realizacji obsługi UARTa może on blokować procesor...
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...
Ale kiedy chciałem ustawić port C poleceniem "Config PORTC= &B1111111" od razu wyskoczył mi błąd "Variable can not be used with Niech kolega poczyta o $regfile w helpie.
Zmieniłem program na ATmega8 ( bo ATmega16 nie posiadam ) [syntax=basic4gl] '$regfile = "m16def.dat" $regfile = "m8def.DAT" $crystal = 8000000 Config Pind.7 = Input Config Pinc.0 = Output Set Portc.0 Set Portd.7 Do If Pind.7 = 0 Then Portc.0 = 0 Else Portc.0 = 1 End If Loop End [/syntax] wgrałem, program działa dobrze. Bascom DEMO 2.0.7.1
'Atmega8 $regfile = "m8def.dat" $crystal = 8000000 . Config Lcd = 16 * 2 Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5 Config Clock = Soft Enable Interrupts Time$ = "00:00:00" Do Lcd Time$ Wait 1 Loop End 'i juz masz zegarek Dopisz do tego zmienne pomocnicze...
Nie nie można. Z PW Wynika to z zasady działania układu ULN2803 ale można to zrobić z wykorzystaniem UDN2981A (portC - zanegować)
Ja używam takiego kodu - odbiornika. Config LCD dostosuj do swoich potrzeb. Działa na każdym pilocie RC5. Instrukcję Lowerline wyrzuć. [syntax=basic4gl] 'Atmega8 Wyświetlanie z pamięcią i napisem Odczyt RC-5 $regfile = "m8def.dat" $crystal = 8000000 Dim Adress As Byte , Command As Byte , Togglebit As Bit Config Lcd = 16 * 2 Config Lcdpin = Pin , Db4...
Config Lcd = 16 * 2 Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5
Przerwanie od INT0 powinno aktywować przerwania od timera, które co 50ms będą zmieniać stan portu c: INT0: - blokuj przerwania INT0 - licznik sekwencji na portc = 0 - aktywuj przerwanie timera INT TIMERA: - switch (licznik sekwencji) ..... w ostatnik case czy default: 1) blokuj przerwania timera 2) kasuj flagę INT0 3) włącz przerwania int0
Witam. A może tak prościej? 'Odbieranie kodu RC5 $regfile = "m8def.dat" $crystal = 8000000 Config Lcd = 16 * 2 Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portd.0 , E = Portc.4 , Rs = Portc.5 Config Rc5 = portd.2 Dim Address As Byte , Command As Byte Enable Interrupts Do Getrc5(Address , Command) Command...
Ja bym zaczął od wstawienia jakichś małych przerw między instrukcje ustawiania pinów FQUP i WCLK. Datasheet mówi jasno : o minimum 7mS dla FQUP i minimum 3,5mS dla WCLK. Nie wiem z jaką częstotliwością taktujesz Atmegę - ale raczej nie spełniasz tych zależności (szczególnie tej drugiej) - ponieważ nie masz nic między tymi instrukcjami: [syntax=c]PORTC...
PORTC &= !(1<<1); PORTC &= !(1<<2); PORTC &= !(1<<PC0); PORTC &= !(1<<5); PORTC &= ~(1<<1); PORTC &= ~(1<<2); PORTC &= ~(1<<PC0); PORTC &= ~(1<<5); Najpierw pousuwaj tego typu krzaki a potem zoptymalizuj to...
Działaj na pojedynczych pinach: config portc.1= output portc.1=1 albo set portc.1
Tak podpiete zasilania wszystkie sa. Masy sa te same. Z tym DDR to chyba tak chociaz juz coraz mniej ufam bascomowi. Wpisalem: portc = Output
Spróbuj takiej kolejności: [syntax=vbnet] Config Scl = Portc.5 Config Sda = Portc.4 I2cinit Config I2cdelay = 10 [/syntax]
To podlacz :> PortC jest zasilany wlasnie z AVCC :>
Nie wiemy co jest na ENABLE bo ten set portc.3 jest w przerwaniu co 400 us
Witam. Zbudowałem zegarek na atmega8 i pcf8583. Do komunikacji wykorzystałem portc.1 i portc.0 ale gdy pokazałem go nauczycielowi to odesłał mnie i kazał zrobić komunikacje na pinach przystosowanych do i2c czyli sda(pc.4) i scl (pc.5)tak abym nie wykorzystywał: Config Sda = Portc.0 Config Scl = Portc.1 Jak zainicjować taką transmisje?
W odpowiedzi na prośbę. Kod : $regfile = "m8def.dat" Config Lcd = 16 * 2 Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5 Cursor Noblink Off Cls Lcd " TEST" Lowerline Lcd "WYSWIETLACZA LCD" Do Loop End Efekt jaki musisz uzyskać: http://obrazki.elektroda.pl/7284253100_1...
Jednoczesny odczyt zawsze był możliwy, np tak: IF pind.1=1 and pinb.1=1 then reset portc.0 zajmuje 26 cykli? Dziadostwo. Gdybyś się BARDZO śpieszył to możesz zrobić tak: [syntax=asm] $asm sbis pind, 1 rjmp wyjdz sbis pinb, 1 rjmp wyjdz cbi portc, 0 wyjdz: $end asm [/syntax] Szybciej już się chyba nie da.
Ustawienie : Config Lcd = 20 * 4 Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.3 , Db6 = Portb.2 , Db7 = Portb.1 , Rs = Portc.0 , E = Portb.5
Niestety nadal nie działa. Podłączam akumulatorek(1,2v) pod GND i Portc.1. Może wyjscia procka sie spalily? Pozdrawiam
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...
Napisałem taki program, ale nie działa [syntax=c_loadrunner]#include <avr/io.h> #include <util/delay.h> int main(void) { PORTC=0xff; uint8_t a=0; while(1){ PORTC = 0x00; if( !(PIND &(1<<PD1))){ a = a + 1; } _delay_ms(10); PORTC |=(1<<PC1); } }[/syntax]
Z tego co widzę, to może być tak: uC Wyświetlacz Portc.3 - pin 11 (Db4), Portc.2 - pin 12 (Db5), Portc.1 - pin 13 (Db6), Portc.0 - pin 14 (Db7), Portc.4 - pin 6 (E), Portc.5 - pin 4 (RS)... Pin 5 (RW) podepnij na masę. Piny 15 (+) i 16 (-) to podświetlenie, piny 1 (masa) i 2 (+) to zasilanie, pinem 3 regulujesz kontrast (poprzez wpięty potencjometr)......
I co z pcfem Trochę powróżę, bo schematu nie widziałem na oczy. Mniemam, ze ten PCF to "coś" na I²C. Zajrzyj w końcu do noty katalogowej , s. 219, masz tam opisane które piny i jak są używane. I²C(PC4/5) nie wchodzi w skład tej drużyny, tylko RESET, cały PORTD, bity od 0 do 5 PORTB oraz bity od 0 do 2 PORTC.
Masz tam za mało o jedną cyfrę musi być osiem a masz napisane siedem jedynek w wierszu Config PORTC = &B1111111 powinno być Config PORTC = &B11111111 ale w atmega8 jest tylko do PC6, nie ma PC7. pozdrawiam
Hmmm.... niepotrzebnie komplikujesz proste zadanie :D "Rozgryź" coś takiego: //przed zapisem rozkazu RS=0 , znaku RS=1 , a R/W jest na GND void write_byte(unsigned char nb) { unsigned char rb=0,x; //odwracamy kolejność bitów i oczywiście półbajtów ;-) for(x=0;x<8;x++) { rb>>=1; rb|=(nb & 0x80); nb<<=1;...
Zapisz konfigurację LCD w jednej linii (u mnie działa). Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5 Pozdrawiam...
Nie wgłębiałem się , ale tak na szybko spróbuj zmienić w procedurze Odior_pilota: po Toggle Portc.0 waitms 5 na np. waitms 100
PORTC.1 - 1wire PORTC.0,1,2 - multiplexowanie wyświetlaczy PORTD - segmenty
słuchaj a do których pinów masz podłączone te diody? do PC4 i PC5 tak jak pisałeś w 1 poście? bo jeśli tak to: PORTC=0x7D; //zielona 1111101 PORTC=0x3E; //czerwona 111110 wydaje mi się że tak to zmieniasz stany na PC0 i PC1 czy się mylę? dlatego zadziałało przed while() bo tam zanegowałeś cały port a nie poszczególne piny ;] przełącz diody albo zmień...
Ja bym się tym miernikiem nie sugerował. Albo podciągnij zewnętrznie, albo przez: PORTC |= (1<<DDRC5)|(1<<D...
A gdzie masz deklarację procesora, częstotliwości, konfigurację pinów do LCD? Co do programu, to proponuje: ' naglowki programu Do Locate 1 , 1 Lcd "Witaj!" Wait 3 Locate 1 , 1 Lcd "Czy dziala?" Wait 4 Locate 1 , 1 Lcd "!!! TAK !!!" Wait 5 Cls Loop Gdzie nagłówkami programu muszą/mogą być: - deklaracja procesora np. m32def.dat...
Cały czas mówię o nowym :) $regfile = "m8def.dat" 'Atmega8 $crystal = 8000000 'kwarc 8MHz Config Portc.4 = Output Set Portc.4 Do Toggle Portc.4 Wait 1 Loop
Nie mam pojęcia po co chcesz pchać tutaj uC chyba, że jest to w ramach szkolenia. Co do schematu, jeżeli zamierzasz użyć atmegi należy przerobić trochę schemat. Program nie ma prawa działać, gdyż nie ma najmniejszego sensu. uC po trzykrotnym wykonaniu pętli pozostanie w stanie Portd.0 = 1, Portd.1 = 1. Masz tutaj kawałek kodu z opisem, przetestuj go...
Tych znaków jest trochę więc proponuję bufor wejściowy. Wyświetlacz przyjąłem 16*2: $crystal = 4000000 $baud =4800 Config Lcd = 16 * 2 Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.4 , Db6 = Portc.5 , Db7 = Portc.6 , E = Portc.2 , Rs = Portd.6 Config Serialin = Buffered , Size = 32 Dim Znak As Byte Dim I As Byte Cls Enable Interrupts I = 1 Do Do...
Wiem o co chodzi i też o tym pomyślałem. Dałem nawet, wykonujące się 10000 razy, pętle "for" po zapaleniu każdego wyświetlacza. Oczywiście nic to nie dało. No i nadal nie potrafię zrozumieć, w symulacji, zachowania rejestrów PORTC i PINC przy ostatnim wyświetlaczu...
Czy jest możliwy błąd podłączenia? Tutaj oczywiście zmieniłem na PB.1 Tak, wszystko jest możliwe... Spróbuj ten code: [syntax=basic4gl] 'DS18B20 - ROM reading test from single sensor DS18B20 $regfile = "m8adef.dat" $crystal = 4000000 $hwstack = 80 $swstack = 80 $framesize = 40 Config 1wire = Portb.1 'Config 1wire = Portd.5 Dim N As Byte Dim Dsid1(8)...
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...
atmega32 portc portc atmega32 atmega16 portc
automapa windows oświetlenie kurnika skrzynia automatyczna dodge
lutownica arduino lutownica arduino
Lodówka Bosch nie włącza się - przyczyny i rozwiązania Błąd E2 w lodówkach Candy - czujnik temperatury