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...
ź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];
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
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...
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ę...
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...
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...
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...
Ma to być mniej-więcej tak: Config pind.5 = input set portd.5 s1 alias pind.5 do if s1 = 0 then ------------------ end if loop masz coś takiego? Bardzo ważny jest układ nazw PIND i PORTD Wyjście za przyciskiem bezpośrednio do masy. Masz tak? Jeśli nadal nie działa może być konieczne podanie schematu i wsadu. Dodano po 1 A skonfigurowałeś pin diody jako...
Nie korzystałem nigdy z trybu asynchronicznego, ale właśnie w tym, że jest on asynchroniczny wydaje mi się, że leży Twój problem. W szczególności myślę tutaj o dostępie do rejestrów timera w tym trybie. Poszukaj na ten temat informacji. Może tu coś znajdziesz: http://www.atmel.com/dyn/resources/prod_... Drobna rada: [syntax=c]//zamiast...
Witam. Dla czytelności Waszych kodów... Autor tematu: michas: michas powiedział chyba wszystko, co trzeba było powiedzieć co do samego kodu i kilku zawartych w nim błędów, a ode mnie jeszcze pytanie - czy zadbałeś o filtrację zasilania Twojego uC ? Jest to wbrew pozorom bardzo ważny temat jeśli chcesz, żeby nawet takie proste miganie LEDem działało...
Po pierwsze to zobacz, wykonujesz tu aż 8 operacji odczytu dokładnie tej samej wartości - tracąc niepotrzebnie czas: [syntax=c] PORTD |= ((pgm_read_byte( &cyfry[cy1] )&(1<<7) )>>4); PORTD |= ((pgm_read_byte( &cyfry[cy1] )&(1<<6) )>>5); PORTD |= ((pgm_read_byte( &cyfry[cy1] )&(1<<5) )<<1); PORTB...
$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...
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...
A masz oscyloskop zeby steirdzic ze rzeczywiscie sie nic nie dzieje? Ja wrzucilem taki program do megi16 #include <avr/io.h> // dostęp do rejestrów #include <avr/interrupt.h> // funkcje sei(), cli() #include <avr/signal.h> // definicje SIGNAL, INTERRUPT SIGNAL(SIG_OVERFLOW0) { PORTD=0xFF; } int main(void)...
No przedefiniuj sobie #define SCLK_RF_PORT PORTD.5 //wyjście SCLK na #define SCLK_RF_PORT PORTD //wyjście SCLK A definicje wyjść daj przykładowo: #define aa (PIND | _BV(PD2) I wtedy jeśli np w kodzie użyjesz potem SCLK_RF_PORT = aa; PORTD powinien ustawić bit 2 nie zmieniając stanu pozostałych bitów. Tylko UWAGA. Powyższy kod napisałem z...
Pisane "z palca" i nie sprawdzane: [syntax=c]unsigned int ledy[100][2]={{1,2},{3,4}... i tak dalej}; //pierwsza liczba w {} to piny portu D, druga liczba to czas opóźnienia, kolejna klamra to kolejna para liczb //100 to ilość par for(unsigned char i = 0; i<100; i++){ PORTD = ledy[i][0]; _delay_ms(ledy[i][1]); }[/syntax] Możesz także umieścić tablicę...
Proponuję: if (r >=g && r >= b) PORTD |= _BV(PD4) Analogicznie dla "g" i "b". Należy także gasić wszystkie diody przed sprawdzaniem warunków. Założyłem, że stan wysoki na porcie zapala diody. Jeśli zachodzą warunki podane przez kolegę Andrzej_S , to zapalają się te diody, które są równe pod warunkiem, że są to wartości największe.
Witam. Po pierwsze, zegar procesora definiuj w opcjach projektu, każdy tutaj na forum Ci to powie. Po drugie: spójrz na tę linijkę: [syntax=c]while(liczba_cykli=zmienna)[/s... program nigdy nie wejdzie w tą pętlę z paru powodów: liczba_cykli = 10, natomiast inicjalizacja zmiennej: zmienna = 0, co oznacza, że nigdzie nie zwiększana zmienna nigdy nie...
Dałem pętlę while(1) w main i dioda nadal nie miga. Gdze ją dodałeś? U mnie działa. [syntax=c] #include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> #define LED_PIN (1<<PD7) #define LED_TOG PORTD ^=LED_PIN volatile int licz; int main(void) { DDRD |= LED_PIN; TCCR0 |= (1<<CS02); TIMSK |= (1<<TOIE0);...
Czy jest możliwość, aby po powrocie z przerwania na PORTC pojawiła się ostatnia wartość sprzed wywołania tegoż przerwania? O ile dobrze zrozumialem twoj problem to rozwiazanie jest proste - na poczatku przerwania zapamietaj stan PORTD w jakiejs zmiennej i odtworz go na koncu obslugi przerwania. Co do delay w przerwaniu to sie nie przejmuj tym co pisza...
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 ,...
Nie wiem w jakim celu wyłączasz timer na czas obsługi przycisku. Procedura obsługi przerwania powinna być jak najkrótsza. Niepotrzebnie wywołujesz za każdym razem funkcję setNum(). Warto byłoby ją wyrzucić do pętli głównej i wykonywać tylko w momencie zmiany prędkości. Utwórz sobie tablicę trzech elementów, w których przechowywał będziesz kolejne cyfry....
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...
ustaw sobie przerwanie od np. TIMER2 co 10ms i sprawdzaj 4 ostatnie stany przycisku. teoria: http://mikrokontrolery.blogspot.com/2011... powyższe zaadoptowane do A8: [syntax=c] //**************definicja przycisku************** #define _Key _BV(PD7) #define Key_PIN PIND #define Key_DDR DDRD #define Key_PORTPORTD...
Witam. .............. Program testowy ma działać tak, na początku na sekundę wyświetla 36 na wyświetlaczach (i to zawsze się dzieje), później ma liczyć od 00 do 99, i tak w kółko. Pozdrawiam Zmieniłem trochę twój code. -Nie testowany.... (tylko symulator)........ [code][syntax=basic4gl] ' Example for 2 digit LCD display (Common Anode) ' Anodes are...
Jeżeli przycisk miałby podciąganie to zawsze byłby w trybie gaszenia a po wciśnięciu i zwarciu do masy 0 czyli tryb rozjaśniania tu mi już coś nie pasuje! Dodano po 20 [syntax=basic4gl]$regfile = "m8def.dat" $crystal = 16000000 Config Pinb.1 = Output Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Disconnect , Prescale =...
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...
Spróbuj tego kodu : #define F_CPU 4000000 #include <avr/io.h> #include <stdlib.h> #include <avr/io.h> #define DDR_DB4 DDRD #define PORT_DB4 PORTD #define DB4 PD3 #define DDR_DB5 DDRD #define PORT_DB5 PORTD #define DB5 PD4 #define DDR_DB6 DDRD #define PORT_DB6 PORTD #define DB6 PD5 #define DDR_DB7 DDRD #define PORT_DB7 PORTD #define...
proponuje cos takiego: #include <avr/io.h> #include <avr/delay.h> #include "io.h" void USART_Init( unsigned int baud ) { //ustawienie portu DDRD &= 0xFE ; DDRD |= 0x02 ; PORTD |= 0x03 ; /*set baudrate*/ UBRRH = (unsigned char)(baud>>8); UBRRL = (unsigned char)baud; /*enable receiver and transmitter*/ UCSRB = (1<<RXEN)|(1<<TXEN);...
Nie wiem, w jaki sposób Twój kompilator zapisuje liczby binarne, ale lepiej zmień na hex. DDRD = 0xFF; /* Początek nieskończonej pętli */ while(1) { PORTD = 0x2; _delay_ms(530); PORTD = 0; _delay_ms(530); }
Widzę że muszę trochę sprostować. 1. Nawet kosmicznie często wywoływane przerwanie zdąży się wykonać choć by nie wiem jak długo ono trwało, bo przerwania po wejściu w obsługę jakiegoś przerwania są blokowane i odblokowywane są dopiero po zakończeniu się obsługi tego przerwania. Więc twierdzenie że przerwanie nie zdąży się wykonać w ciągu 128us bo samo...
Jest parę błędów które widzę już teraz. Pozwoliłem sobie wstawić to w syntax bo nie dało się czytać :) unsigned char ilosc_imp=0; powinno zostać opatrzone jeszcze etykietką volatile. Czyli: [syntax=c] volatile unsigned char ilosc_imp=0; [/syntax] Volatile wyłącza dla tej konkretne zmiennej optymalizację. Jest to konieczne jeżeli korzystasz ze zmiennej...
Wklejam ten kod [url=http://bascom-forum.de/showthread.p... właściwego postu . [syntax=basic4gl]'----------------------... ' Dateiname : TEA5767-TP.bas ' Revision : 1.0 19.08.2012 ' Controller : AVR ATmega8 ' Autor : Thomas Palluthe (www.tp-homesoft.de)...
Ten powinien działać musisz wszystko wykonywać w odpowiedniej kolejności. A wspak to on może też czytać sensu to nie będzie miało (2 znacznie nawet objaśnienie :D )musisz zmienić na adres-1, kierunek musi być dodawany zakres adresu dla zmiany kierunku zamienione miejscami i adres musi się zaczynać na 80. A Pętla for next jest tylko po to aby wykonać...
Niech kolega sprawdzi, bo nie testowałem, ale powinno działać co 0,1°C. [syntax=basic4gl]'Regulowany termostat cyfrowy 'Projekt wykonał Krzysztof Gońka $regfile = "m8def.dat" $crystal = 1000000 Config Portb = &B11000001 Portb = &B11111111 Config Portd = &B11111111 Portd = &B11111111 Config Lcd = 16 * 2 Config Lcdpin = Pin , Db4 = Portc.3...
$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...
Obiecałem działający programik. Działa na 100%. Jest to progrtam, który wysyła stan temperatury z DS18B20 do kompa, ale dla Ciebie najistotniejszy jest sposób komunikacji. Jest wysyłane zapytanie i uC zwraca odpowiedź. Jak uporasz się z krzaczkami, to program Ci się przyda. Można zrobić bardzo prosty protokół wymiany informacji. #include <avr/io.h>...
Ale litości. Wstaw ATTiny2313. Po co aż ATMega32? ATMega8 to by było przegięcie a co dopiero 32. $crystal = 4000000 Config Lcd = 16 * 1a Cursor Off Config Timer0 = Timer , Prescale = 1024 Config Timer1 = Counter Dim Temp As Byte Dim R As Byte Dim Freq_compare As Word Dim Metal_type As Bit Dim Freq As Word Dim Dif As Word Dim Temp2 As Byte Dim Prescale...
Tutorial do avr taki znalazłem: http://avr.elektroda.eu/?q=node/8 Jak byś czegoś w sieci szukał, to raczej unikaj tutoriala z patron.net, uczy złych nawyków i jest nieco nie na czasie. Pomiar częstotliwośći na AVR realizuje się w miarę łatwo, przy wykorzystaniu timerów, jeden timer pracuje jako licznik impulsów z zewnątrz, a drugi odmierza czas, mozna...
Witam. Chcę przedstawić szopkę Bożonarodzeniową. http://obrazki.elektroda.pl/9749389200_1... Całość wykonana własnoręcznie z pomocą kochanej żonki. Opiszę co i jak. Szopka ma ruchomy żłobek, dwie pochodnie i ognisko, na filmikach wszystko widać. Opiszę konstrukcję, do sterowania wszystkim użyłem Atmegi8. Trzy sprzętowe kanały PWM posłużyły...
Aby sprawdzić stan wejścia czyta sie PIND, a nie PORTD.
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...
http://obrazki.elektroda.pl/5336859500_1... Projekt został zrealizowany na potrzeby sterowania urządzeniami zasilanymi z sieci 230V , świetnie nadaje się jako sterownik do wytrawiarki lub innych tego typu urządzeń, w których konieczne jest utrzymywanie stałej temperatury. Układ oparty jest o mikrokontroler ATmega8 firmy Atmel , który...
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....
g_06 Zmieniasz z ATMEGA8 na ATMEGA8535 $regfile = "m8def.DAT" To można zostawić: $lib "lcd4busy.lbx" Const _lcdport = Portd Const _lcdddr = Ddrd Const _lcdin = Pind Const _lcd_e = 3 Const _lcd_rw = 2 Const _lcd_rs = 1 LCD tak podpinasz: DB7 = PD.7 DB6 = PD.6 DB5 = PD.5 DB4 = PD.4 E = PD.3 RW = PD.2 RS = PD.1
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).
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...
Witam. Znalazłem coś innego i po modyfikacji działa jak powinno . Przypisany jeden klawisz pod PB.2 wysyłający LewyALT + Q. Jest też zmiana u gnieździe usb D- PD.3 na PD.4. [syntax=vbnet] 'Author : Rick Richard 'www : http://www.sloservers.com/swusb 'Created : Jul 29, 2009 'Version : 1.00 '***************************************...
Witam, mam następujący problem na porcie D mam założoną klawiaturę 4x3. Używam polecenia GetKBD() programu BASECOM do odczytów naciśniętych klawiszy (oczywiście wcześniej zadeklarowałem Config Kbd = Portd ) Okazuje się, że nie mogę przeczytać linii podpiętych do PortD.0 i PortD.1 a pozostałe linie czytam dobrze. Problem nie polega na podłączeniu gdyż...
atmega8 portd atmega8 dioda portd atmega8 bascom portd
berlingo wycieraczka tylna zasilać kampera cisnienie paliwa megane
termet termax condens problemy diagbox
Podłączenie manometru do rozdzielacza T: wymagania i wskazówki Koszt obudowy do prostownika TELWIN LEADER 400 Start