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ęć...
Portc i Portc.4 zamień odpowiednio na Pinc i Pinc.4.
Ta instrukcja nie robi NIC: PORTC |= (0<<PC5);
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));
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...
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)...
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.
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...
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
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...
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...
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...
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...
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ę...
także chciałbym zapytać jak mogę indywidualnie nastawiać każdy PIN potru z osobna? Np. PORTC |=0x08 PORTB |= (1<<PB6) Poczytaj o operatorach bitowych - http://mikrokontrolery.blogspot.com/2011... Else dotyczy poprzedzającego go ifa. http://mikrokontrolery.blogspot.com/2011...
Wydaje mi się że po prostu użyj jakieś flagi i zmiennej globalnej która zapamięta wartość PORTC w momencie wejścia do przerwania. Aby rzeczywiste wartość ta była zachowane użyj zmiennej volatile char to znaczy wchodząc do przerwania funkcja będzie wykonywana na tej zmiennej a nie na jej kopii.
Tak na szybko: Masz zmienną : Byte (1 bajt, 8 bitów) Word = 2x Byte (2 bajty, 16 bitów) Long = 2x Word (4 bajty, 32 bity) Nie ma zmiennej składającej się z 3 bajtów, dlatego jeśli chcesz rozszerzyć tą idee na 3 porty musisz użyć zmiennej Long, następnie rozbić ją na 2 zmienne WORD a potem WORD rozbić na 2 zmienne Byte ( i je przydzielić do portów) Wizualnie...
Bity w MCUCR określają na co będzie reagować przerwanie zewnętrzne... Zmiana stanu, opadające lub narastające zbocze więc jest to jak najbardziej potrzebne... SIGNAL (INT0_vect) - obsługa zewnętrznego przerwania INT0... SIGNAL (TIMER0_OVF_vect) - obsługa przerwania od przepełnienia timer0... Co do portu... Jak na mój gust powinno być PORTC = !PORTC;...
Propozycja zmian $regfile = "m8def.dat" 'program jest pisany na procesor atmega8 $crystal = 8000000 'procesor będzie pracował z kwarcem bądź na wewnętrznym oscylatorze 8Mhz '---------------------------------------... Config Lcd = 16 * 2 Config Lcdpin = Pin , Db4 = Portc.5 , Db5 = Portc. 4 , Db6 = Portc.3 ,...
Ruszył dopiero po dodaniu kwarcu (i oczywiście zmianie fusów), na wbudowanym generatorze niestety wisiał. To interesująca propozycja, zwłaszcza że inne pomysły już mi się wyczerpały. Spróbuję dołączyć kwarc 4Mhz i oczywiście odpowiednio ustawić pod tym kątem mikroprocesor. . Jak mógł wisieć czy tam nie działać na wewnętrznym oscylatorze i ruszyć dopiero...
Spróbuj zrobić od przepełnienia. W proteus'ie też port zmieni raz stan i nic. volatile int flaga; #include <avr/io.h> #include <avr/interrupt.h> int main (void) { DDRC = 0xff; // Ustaw jako wyjście LED TIMSK = 0x04; // Włącz przerwania przepełnienia (1 <<TOIE1) SREG = 0x80; // włącz przerwania globalne sei()...
Nie zadziała to w tak prostej formie w jakim masz kody. 1. W kodzie 1 musisz ustawić PWM z timera 1 na 10bitowy (masz 8bitowy w konfiguracji). 2. W kodzie 2, nie masz ustawionego PORTC na wejście dla przetwornika. 3. W kodzie 2, samo przypisanie W = Getadc(channel) (po skonfigurowaniu timer1 i zmianie rozdzielczości PWM na 10bit) będzie zmieniało prędkość...
Avcc podłączone? :)
Witam Oto kod w języku C. Odnośnie schematu - będzie wszystko działało prawidłowo, gdy zastosujemy diody LED niskoprądowe (np. /*Czestotliwosc taktowania procesora 1 MHz (korzystamy z wewn. RC 1MHz) *Procesor ATmega 8 */ #define F_CPU 1000000UL #include <avrio.h> #include <utildelay.h> #define Czas_zalaczania 400//Czas oczekiwania...
W helpie opisane jest ze nazwa Alias portc.2 a prwidlowo jest nazwa alias pinc.2 Właśnie. Nie zauważył kolega, że Portc i Pinc to są różne rejestry AVR'a. Znowu nie chodzi o kolorowe tylko o zrozumienie filozofii portów µC. Przypomnę: Portx - rejestr, do którego zapisujemy stan portu jeśli jest zdefiniowany jako wyjścia, lub podłączenie rezystorów...
A więc tak. 1. ATmega8 nie posiada linii PC7. 2. Linia PC6 jest wykorzystywana jako reset. Żeby użyć jej jako linii IO należy przestawić odpowiedni fusebit. Jednak wtedy tracisz możliwość programowania ISP - wtedy pozostaje tylko programator równoległy. Być może wiesz o tym, ale skoro już piszę to warto było wspomnieć. 3. PORTC = 0xff; Ustawiając port...
$regfile = "M8def.dat" $crystal = 8000000 $hwstack = 32 $swstack = 32 $framesize = 32 '---------------------------------------... Dim Adc_data As Integer Dim S As Single Dim L As Long Dim Text As String * 30 '---------------------------------------... Portb = &B00000000...
Witam. A więc tak. Ustawienie linii na wejście i podanie stanu wysokiego powoduje podciągnięcie tejże linii do VCC poprzez rezystor (a nie do masy). Posłuchaj kolegi Don Diego. A z jakiego programatora korzystasz? PC6 standardowo jest resetem uC. Dopiero po przestawieniu fusebitu można z niego korzystać jak z linii IO. Jednak wtedy tracisz możliwość...
Poszukałem i znalazłem prosty programik w C dla AT90S8515 z kwarcem 8 MHz mrugający diodą LED. Dokonałem małej zmiany (częstotliwość kwarcu), kompilowałem go za pomocą avr-gcc pod linuksem, zaprogramowałem mikrokontroler ATmega8 za pomocą uisp i STK200 i... działa z wewnętrznym oscylatorem 1 MHz. Dioda LED jest przez rezystor podpięta anodą do +5V i...
A co zrobić żeby kolejne kliknięcie zmieniło x na zero? To nie zadziała zbyt dobrze, bo przytrzymanie przycisku będzie ciągle zmieniać stan x na przeciwny. Zresztą taką zmianę szybciej można zrealizować za pomocą x^=1; Stąd też najlepiej PINC przypisać do jakiejść zmiennej tymczasowej i sprawdzać czy od ostatniego sprawdzenia stan przycisku uległ zmianie....
No to próbuję: [syntax=c] //* \section OA Original author //* Andy Gayne is the original author of this application note. //*/ //program z noty Atmela 136 //przerobiony na ATMega8, kwarc 11059200 i okrojony program #include <avr/io.h> #include <avr/interrupt.h> //! Pin mappings #define CHMAX 6 // maximum number of PWM channels #define PWMDEFAULT...
ja bym to zrobił tak: $regfile = "m8def.dat" $crystal = 4000000 Config Lcd = 20 * 2 Config Lcdpin = Pin , Db4 = Pb.2 , Db5 = Pb.3 , Db6 = Pb.4 , Db7 = Pb.5 , E = Pb.1 , Rs = Pb.0 Config Portc = Input Portc = &B000000 Dim Szyba1 As Word Dim Szyba2 As Word Dim Szyba3 As Word Dim Szyba4 As Word Dim Wzor As Word Dim A As Word Config Adc = Single...
Zwłaszcza że pewne inklinacje do C już posiada. Cały program w nawiasach klamrowych. Baskom nie burzył się o to? I co wniosłeś do tej dyskusji oprócz złośliwego sarkazmu??? Do autora watku: Zakładam że posiadasz Silnik jak na schemacie z 1-go postu, razen z płytką ULN połączone ze sobą wtyczką bez zmian w konfiguracji połączenia. Korzystając do pewnego...
No Dobra program juz prawie napisałem i głowiłem sie nad wersja ze zmiennym PWM+f... ale z tego co mi odpisałes to wnioskuję ze coś tu mi nie gra... A nie możnaby programowo realizować ten restart co 80ms? Moze napisz dokładniej co to ma być a coś doradzimy :) Pozdro No wlasnie o to chodziło by nie restartorwać tego zewnetrznie bo chyba prosciej zaimplementowac...
$regfile = "m8def.dat" $crystal = 8000000 Config Timer1 = Pwm , Pwm = 8 , Compare B Pwm = Clear Down , Prescale = 1 Config Portb = 255 Config Portc = 255 Config Portd = 255 Portb = 0 Dim A As Byte 'Czerwony Dim B As Byte 'Zielony Dim C As Byte 'Niebieski Dim D As Byte 'Czas A = 0 B = 255 C = 255 D = 4 Zolty: Do Pwm1b = A Set Portb.4 Waitms...
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...
http://obrazki.elektroda.pl/7995180000_1... Witam! Jakiś czas temu rozpocząłem naukę pisania programów na mikrokontrolery AVR w języku C++. Przeczytałem wiele tutoriali, poradników, itp., aż w końcu doszedłem do pisania własnych, prostych programów. Po kilku takich „pseudoprogramach” zdecydowałem, że teraz czas napisać coś...
Nie kombinuj tylko w inicjalizacji ustaw bit LED w DDRC i PORTC.
http://obrazki.elektroda.pl/5826537700_1... Poniższy opis prezentuje jak, krok po kroku, skonstruować prosty termometr oparty na mikrokontrolerze. Układ ten mierzy i wyświetla temperaturę powietrza. Nie jest to może najdokładniejszy termometr świata, ale jest dobrym projektem który zrealizować można w domu ucząc się jednocześnie np....
http://obrazki.elektroda.pl/9389203100_1... Witam. Projekt potencjometru cyfrowego zrodził się po tym, jak analogowy potencjometr wieloobrotowy uszkodził się. Nie chciałem, aby ponownie coś takiego się stało (te potencjometry są dość drogie ;P około 30zł), więc postanowiłem wykonać coś lepszego. Założenia regulacja rezystancji od 0-100...
IN data, PINC . W końcu interesuje Ciebie to co jest na pinie wejściowym, a nie to jak skonfigurowałeś rejestr PORTC.
Z tego co napisałeś nie wszystko wynika, ale prawdopodobnie wystarczy zmienić: PORTC = 0x0f na PORTC = 0xff.
(at)ElektrodaBot /* Program realizujący obliczanie i wysłanie przez moduł HC-05 (Bluetooth z interfejsem SPP, czyli RS-232) wyniku funkcji kwadratowej y = 0.3187x^2 + 2x - 7 na podstawie x odebranego wcześniej także za pomocą HC-05. Szczegóły: http://mikrokontrolery.blogspot.com/...
Chyba tak w BASCOMie [syntax=basic4gl]Config Portc = Input Portc = 0 [/syntax]
napisz w języku C program na Atmega8 ładujący plik hex do pamięci mikrokontrolera AT89S52 poprzez interfejs ISP. Komunikacja PC - Atmega8 poprzez łącze RS232. Oczywiście, chętnie Ci pomogę! Podaję poniżej przykład implementacji w języku C, który pozwala na wgrywanie pliku hex do mikrokontrolera AT89S52 używając mikrokontrolera Atmega8 jako programatora...
Witam wszystkich. Zaprojektowałem i uruchomiłem zegarek z wyświetlaczami LED(SA10-21GWA) i układem PCF8583 współpracującym z mikroprocesorem Atmega8 oraz układami PCF8574AP na szynie TWI(i2c). http://obrazki.elektroda.net/21_12497604... http://obrazki.elektroda.net/58_12497606... http://obrazki.elektroda.net/95_12497605...
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...
config portc = &11111110 portc = &11111110 powinno pomóc
W takim razie musisz robić jakiś błąd w kodzie, pokaż jak to odczytujesz.
Port C ustawiłeś jako wejście. W miejsce zer wpisz jedynki, następnie Portc=&B00000000
atmega8 portc atmega32 portc portc atmega32
linie napowietrzne nagrywania filmików podłączenie alarmu mitsubishi
układ gasikowy stycznika politechnika poznańska
Schemat układu wspomagania kierownicy SsangYong Musso – hydraulika, ciśnienia, regeneracja SEKI ST-22 D4 140°C – znaczenie kodu D4, parametry, konfiguracja NC auto-reset