BlackJack Luty 19, 2012 Udostępnij Luty 19, 2012 A faktycznie źle odczytałem schemat, fakt że jeden jest obok drugiego mnie zdezorientował nieco. Cytuj Link do komentarza Share on other sites More sharing options...
troszyn Luty 20, 2012 Udostępnij Luty 20, 2012 Jeszcze jedno niedopatrzenie. Do pinów CURRENT SENSING A i B (L298N) można podłączyć rezystory do masy, zmniejszając w ten sposób prąd płynący przez silniki. Jeżeli chcemy, aby do silników płynął maksymalny prąd, podłączamy te wyjścia po prostu do masy. Nie do końca może jasno napisane. 1 Cytuj Link do komentarza Share on other sites More sharing options...
ciscoc Sierpień 22, 2013 Udostępnij Sierpień 22, 2013 Witam, kompilator wyrzuca mi następujący komunikat: napis.c:169: error: old-style parameter declarations in prototyped function definition jaki styl? napis.c:169: error: expected '{' at end of input #include <avr/io.h> #define F_CPU 1000000 #include <util/delay.h> #define DDR_DB4 DDRB #define PORT_DB4 PORTB #define DB4 PB4 #define DDR_DB5 DDRB #define PORT_DB5 PORTB #define DB5 PB5 #define DDR_DB6 DDRB #define PORT_DB6 PORTB #define DB6 PB6 #define DDR_DB7 DDRB #define PORT_DB7 PORTB #define DB7 PB7 / #define DDR_RS DDRB #define PORT_RS PORTB #define RS PB2 #define DDR_EN DDRB #define PORT_EN PORTB #define EN PB3 #define SET_DB4 PORT_DB4|=_BV(DB4) #define CLR_DB4 PORT_DB4&=~(_BV(DB4)) #define SET_DB5 PORT_DB5|=_BV(DB5) #define CLR_DB5 PORT_DB5&=~(_BV(DB5)) #define SET_DB6 PORT_DB6|=_BV(DB6) #define CLR_DB6 PORT_DB6&=~(_BV(DB6)) #define SET_DB7 PORT_DB7|=_BV(DB7) #define CLR_DB7 PORT_DB7&=~(_BV(DB7)) #define SET_RS PORT_RS|=_BV(RS) #define CLR_RS PORT_RS&=~(_BV(RS)) #define SET_EN PORT_EN|=_BV(EN) #define CLR_EN PORT_EN&=~(_BV(EN)) void set_half_byte(char x); void write_to_LCD(char x); void write_command(char x); void write_char(char x); void write_text(char*s); void LCDxy(char x, char y) void clear_LCD (void); void init_LCD(void); int main (void) { char s= "W"; init_LCD(); write_text(s); for(;;) return 0; } void set_half_byte(char x) { if (x & _BV(0)) SET_DB4; else CLR_DB4; if (x & _BV(1)) SET_DB5; else CLR_DB5; if (x & _BV(2)) SET_DB6; else CLR_DB6; if (x & _BV(3)) SET_DB7; else CLR_DB7; } void write_to_LCD(char x) { SET_EN; set_half_byte (x>>4); CLR_EN; SET_EN; set_half_byte(x); CLR_EN; _delay_ms(1); } void write_command(char x) { CLR_RS; write_to_lcd(x); } void write_char(char x) { SET_RS; write_to_lcd(x); } void write_text(char * s) { while(*s) { writechar(*s); s++; } } void LCDxy(char x,char y) { unsigned char com=0x80; com|=(x|(y<<6)); write_command(com); } void clear_LCD(void) { writecommand(0x01); } void init_LCD() { DDR_DB4 |= _BV(DB4); DDR_DB5 |= _BV(DB5); DDR_DB6 |= _BV(DB6); DDR_DB7 |= _BV(DB7); DDR_EN|= _BV(EN); DDR_RS |= _BV(RS); _delay_ms(20); CLR_EN; CLR_RS; char i; for (i=0;i<3;i++) { SET_EN; set_half_byte(0x03); CLR_EN; _delay_ms(5); } SET_EN; out_nibble(0x02); CLR_EN; _delay_ms(1); write_command(0x28); write_command(0x08); write_command(0x01); write_command(0x06); write_command(0x0C); } Cytuj Link do komentarza Share on other sites More sharing options...
mi14chal Sierpień 22, 2013 Udostępnij Sierpień 22, 2013 Dodaj nową linię na końcu pliku. Cytuj Link do komentarza Share on other sites More sharing options...
Polecacz 101 Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Produkcja i montaż PCB - wybierz sprawdzone PCBWay! • Darmowe płytki dla studentów i projektów non-profit • Tylko 5$ za 10 prototypów PCB w 24 godziny • Usługa projektowania PCB na zlecenie • Montaż PCB od 30$ + bezpłatna dostawa i szablony • Darmowe narzędzie do podglądu plików Gerber Zobacz również » Film z fabryki PCBWay
ciscoc Sierpień 22, 2013 Udostępnij Sierpień 22, 2013 nie rozumiem, co masz na myśli? Cytuj Link do komentarza Share on other sites More sharing options...
mi14chal Sierpień 22, 2013 Udostępnij Sierpień 22, 2013 Trochę błędów masz: void LCDxy(char x, char y) Zapomniałeś średnika. F_CPU nie definiujemy w kodzie tylko ustawiamy w opcjach projektu. Potem: char s= "W"; zamień na: char* s= "W"; Potem tę linię: #define DB7 PB7 / Na tę zamień: #define DB7 PB7 Jeszcze porobiłeś literówki w funkacjach np zamiast LCD dałeś lcd itp. Cytuj Link do komentarza Share on other sites More sharing options...
ciscoc Sierpień 22, 2013 Udostępnij Sierpień 22, 2013 ok, dzięki. A co miałeś na myśli dodaj nową linię na końcu pliku? Cytuj Link do komentarza Share on other sites More sharing options...
mi14chal Sierpień 22, 2013 Udostępnij Sierpień 22, 2013 Nie doczytałem do końca errora i myślałem, że to inny error był. Cytuj Link do komentarza Share on other sites More sharing options...
klonyyy Sierpień 22, 2013 Udostępnij Sierpień 22, 2013 może chodziło o "\n" ? Cytuj Link do komentarza Share on other sites More sharing options...
ciscoc Sierpień 23, 2013 Udostępnij Sierpień 23, 2013 Witam, poprawiłem program Ale nic nie wyświetla. Panowie proszę o prześledzenie programu, kompilator nic nie krzyczy ładuje program do AVR i nic się nie dzieje gdzie może być błąd? #include <avr/io.h> #define F_CPU 1000000 #include <util/delay.h> #define DDR_DB4 DDRB #define PORT_DB4 PORTB #define DB4 PB4 #define DDR_DB5 DDRB #define PORT_DB5 PORTB #define DB5 PB5 #define DDR_DB6 DDRB #define PORT_DB6 PORTB #define DB6 PB6 #define DDR_DB7 DDRB #define PORT_DB7 PORTB #define DB7 PB7 #define DDR_RS DDRB #define PORT_RS PORTB #define RS PB2 #define DDR_EN DDRB #define PORT_EN PORTB #define EN PB3 #define SET_DB4 PORT_DB4|=_BV(DB4) #define CLR_DB4 PORT_DB4&=~(_BV(DB4)) #define SET_DB5 PORT_DB5|=_BV(DB5) #define CLR_DB5 PORT_DB5&=~(_BV(DB5)) #define SET_DB6 PORT_DB6|=_BV(DB6) #define CLR_DB6 PORT_DB6&=~(_BV(DB6)) #define SET_DB7 PORT_DB7|=_BV(DB7) #define CLR_DB7 PORT_DB7&=~(_BV(DB7)) #define SET_RS PORT_RS|=_BV(RS) #define CLR_RS PORT_RS&=~(_BV(RS)) #define SET_EN PORT_EN|=_BV(EN) #define CLR_EN PORT_EN&=~(_BV(EN)) void set_half_byte(char x); void write_to_LCD(char x); void write_command(char x); void write_char(char x); void write_text(char*s); //void LCDxy(char x, char y); void clear_LCD (void); void init_LCD(void); int main (void) { char *s= "W"; init_LCD(); write_text(s); for(;;) return 0; } void set_half_byte(char x) { if (x & _BV(0)) SET_DB4; else CLR_DB4; if (x & _BV(1)) SET_DB5; else CLR_DB5; if (x & _BV(2)) SET_DB6; else CLR_DB6; if (x & _BV(3)) SET_DB7; else CLR_DB7; } void write_to_LCD(char x) { SET_EN; set_half_byte (x>>4); CLR_EN; SET_EN; set_half_byte(x); CLR_EN; _delay_ms(1); } void write_command(char x) { CLR_RS; write_to_LCD(x); } void write_char(char x) { SET_RS; write_to_LCD(x); } void write_text(char * s) { while(*s) { write_char(*s); s++; } } void LCDxy(char x,char y) { unsigned char com=0x80; com|=(x|(y<<6)); write_command(com); } void clear_LCD (void) { write_command(0x01); } void init_LCD(void) { DDR_DB4 |= _BV(DB4); DDR_DB5 |= _BV(DB5); DDR_DB6 |= _BV(DB6); DDR_DB7 |= _BV(DB7); DDR_EN|= _BV(EN); DDR_RS |= _BV(RS); _delay_ms(20); CLR_EN; CLR_RS; char i; for (i=0;i<3;i++) { SET_EN; set_half_byte(0x03); CLR_EN; _delay_ms(5); } SET_EN; set_half_byte(0x02); CLR_EN; _delay_ms(1); write_command(0x28); write_command(0x08); write_command(0x01); write_command(0x06); write_command(0x0C); } Cytuj Link do komentarza Share on other sites More sharing options...
prezes4 Sierpień 23, 2013 Udostępnij Sierpień 23, 2013 Witam. Mam problem z termometrem DS18b20, a mianowicie funkcja DS_Reset() cały czas zwraca mi presence=0. Podejżewam, że jest to wina funkcji _delay_, bo być może opóźnienia są za długie lub za krótkie. Stąd moje pytania: 1. Czy ktoś sprawdzał w praktyce ten kod? 2. Czy w funkcji _delay_ znaczenie ma częstotliwość pracy procesora (u mnie 1MHz)? Z góry dzięki. Cytuj Link do komentarza Share on other sites More sharing options...
mi14chal Sierpień 23, 2013 Udostępnij Sierpień 23, 2013 @ciscoc wyświetlacz sprawny? Połączenia są ok? Sprawdzałeś inne kody czy działają? @prezes4 termometr sprawny? Jak go podłączyłeś? Cytuj Link do komentarza Share on other sites More sharing options...
lukas.ch Sierpień 23, 2013 Udostępnij Sierpień 23, 2013 W załączniku masz pdf o tym jak działa 1wire i przykład z termometrem. Klimasz_Cezary_termometr_ds18b20.pdf Cytuj Link do komentarza Share on other sites More sharing options...
ciscoc Sierpień 23, 2013 Udostępnij Sierpień 23, 2013 tak wyświetlacz sprawny, połączenia sprawdzone, w pewnym momencie zaczyna wyświetlać jakieś głupoty typu 3333333 uvx 33333333Wx? Czy ktoś miał podobne problemy? Cytuj Link do komentarza Share on other sites More sharing options...
prezes4 Sierpień 23, 2013 Udostępnij Sierpień 23, 2013 Dzięki, ale czytałem już ten opis 1-wire (jest nawet wydanie drugie) 🙂 Termometr mam podłączony wg schematu: https://www.forbot.pl/forum/upload_img/obrazki/IMG_5217ad3f902823312.jpg . Próbowałem różnych bibliotek, ale albo nic nie pokazywał, albo pokazywał ?*C. Gdzieś czytałem, że 1-wire potrzebuje wyższej częstotliwości niż 1Mhz. To prawda 🙂? @ciscoc Z tego co wiem to funkcje _BV są przestarzałe i jak chcesz to tu masz fajną bibliotekę do LCD: http://radzio.dxp.pl/hd44780/ . Cytuj Link do komentarza Share on other sites More sharing options...
Pomocna odpowiedź
Dołącz do dyskusji, napisz odpowiedź!
Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!