Jak w takim razie powinienem poprawnie zerować bit TWINT ? TWCR &= ~(1<<TWINT); A to czytałeś?: The TWINT Flag must be cleared by software by writing a logic one to it. Prawidłowe zerowanie TWINT: [syntax=c]TWCR |= (1<<TWINT);[/syntax]
Ja też mam problem z TWINT. w żaden sposób nie mogę tego bitu ustawić, chociaż testowałem programy ze wszystkich stron świata. Najzabawniejsze (haha #%%#(at)!!!) jest to, że w symulatorze też się nie ustawia. próbuję na siłę: TWCE = 0xFF. I ... blada. Wszystkie bity w tym rejestrze się ustawiają, a ten łobuz TWINT nie! Dodam, że używam avrstudio4.
OK, napiszę swoją, ale nadal nie wiem czy mam 3,6 czy 5V układ czy schemat jest ok itd. (pytania powyżej)? Dodano po 2 Czekając na odpowiedzi piszę pierwszą funkcję swojej biblioteki I2C: TWI_Init() Zakładam na razie transmisję z zegarem 100kHz. #define F_CPU 12000000UL void TWI_Init(void){ //Ustawiam prędkość transmisji 100kHz ze wzoru:...
Dzięki wielkie z tym STOPem , rzeczywiście sprawdziłem jeszcze raz całość i natknąłem się na błędy typu oczekiwanie na TWINT po wysłanym stopie :P już wszystko działa, tylko przy drugiej próbie wysłania bajtu TWSR przyjmuje inne wartości ( może odbiera repeated start ? chyba nie , w końcu stop był ) ale po zamianie [syntax=c_loadrunner]while(TWSR!=0x80);[...
To Atmega8 więc TWI. Co do TWINT - to wiem, że jest ustawiany po zakończeniu operacji czyli można zastosować konstrukcję Bitwait Twcr.twint , Set. W takim razie niezależnie od otrzymania potwierdzenia od Slave - procedura nie powiesi się oczekując na ustawienie flagi co podpowiada, iż wysłanie Startu, Adresu, 2 bajtów i Stopu przy 400kHz spokojnie zmieści...
Cześć, chciałem sobie podłączyć zewnętrzny eeprom do atmega8 przez interfejs TWI, napisałem procedury ale niestety nie działają i nie wiem w czym jest problem. Linie NC eepromu pozostawiłem bez połączenia, A1 i A0 zwarłem do masy, piny te służą do zaadresowania max 4 kostek eeprom na interfejsie TWI i tutaj dla pewności zapytam czy jeśli zwarłem je...
[syntax=c]#include <avr/io.h> #include <util/delay.h> #include "pcd8544.h" #include <avr/interrupt.h> void i2c_start() { //twint- flaga jest wyzerowana, gdy jest na niej 1, jest ustawiona gdy jest na niej 0 TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTA); //twcr-rejestr ustawień modułu twi, twint-twi interrupt flag, twen-twi...
Próbowałem już kilu różnych rzeczy i nadal nic. Nie wiem jakie jeszcze opcje mi zostały :(. Podstawowa opcja , to oczywiście ... dokumentacja ;) Powiedz mi , dlaczego tak "szastasz" bitem TWEA :?: Ten bit należy ustawić , wyłącznie(!) przy przesyłaniu danych z slave do master i to pod warunkiem , że master ma zamiar odczytywać jeszcze jakieś dane ze...
Zaczynam naukę TWI i zamierzam połączyć tą magistralą dwa procesory atmega8, poniżej kody dla master i slave, połączenie 2 razy sprawdzone linie SDA i SCL podciagniete rezystorami do +, wszystko wydaje się być ok ale jednak brak reakcji na odebrane dane które mają być wysyłane na wyświetlacz led. Wyswietlanie na led też sprawdzone (wysyłane dane przez...
Witajcie ;) W akcie desperacji postanowiłem zapytać na forum...;p A więc, sprawa wygląda tak. Dopiero od niedawna zacząłem swoją przygodę z mikrokontrolerami. Na dobry początek wyposażyłem się w książki panów M. Kardasia oraz T. Francuza. Chciałem zbudować zegarek w oparciu o Atmega8 i DS1307. Zajrzałem więc do odpowiednich rozdziałów. Naczytałem się...
Witam. Próbuję podłączyć układ PCF8574 do Atmeg'i8. Korzystam z opublikowanej na tym forum biblioteki TWI. Prosiłbym aby ktoś wytknął mi błędy w komunikacji z tym układem. Próbuję ustawić na wszystkich wyjściach stan wysoki. Z noty katalogowej wyczytałem że ma to wyglądać tak: Start -> wysłać bajt zawierający adres tj. ( 0100 A2 A1 A0 0/1 ) 0 lub...
Witam, To wszystko jest opisane w sekcji o TWI w dokumentacji AVR. Np. dla ATmega8 na stronie 186 jest tabelka nr 68, w której jest łopatologicznie napisane, co aplikacja powinna zrobić w przerwaniu po odczytaniu statusu TWI. W Twoim przypadku pierwsze przerwanie powinno zostać zgłoszone przy statusie 0x60 (odebrano własny adres, wyslano ACK), wtedy...
Witam Nie wiem jak podłączyć wyprowadzenia pamięci I2C EEPROM ST24C08 (chodzi o piny 1,2,3 oraz 7) by jednorazowo załadować 760 bajtów wykorzystując ATmega8A. Na magistrali jest tylko jedna taka pamięć. Ponadto nie wiem jaki adres ma ta pamięć. Pozdrawiam Dodano po 18 Próbowałem wgrać przy pomocy tego kodu: [syntax=c]#define EE_ADDR 0xA0 const uint8_t...
Witam Definicja funkcji [syntax=c]TWI_start(void) { TWCR = (1<<TWINT)|(1<<TWEN)|(1<&... while(!(TWCR&(1<<TWINT))); }[/syntax] - brakuje void [syntax=c]void TWI_start(void) { TWCR = (1<<TWINT)|(1<<TWEN)|(1<&... while(!(TWCR&(1<<TWINT))); }[/syntax] Pozdr. .
przewlaczylem podobny problem. Jezeli na magistrali sieje, albo są inne problemy (np zwiecha mastera), uklad slave moze pozostac w trakcie odczytu / zapisu danych. W tym momencie nikt nie moze sie podlaczyc do magistrali jako ze SDA jest low. Nie da sie nic wtyslac (zadnych START, STOP ani nic innego). Program wiesza sie na sprwdzeniu flagi TWINT po...
Jestem na etapie pisania programu obsługi czujnika TSL2561 w assemblerze na atmedze8 w związku z czym mam parę pytań. Póki co jestem na etapie inicjacji komunikacji poprzez TWI. Atmega8 pracuje na wewnętrznym oscylatorze 1MHz -> ustawiłem TWBR=1 oraz TWPS 00 (wartość 1). wyliczyłem że Fscl=41,6 kHZ. Czy to jest zrobione prawidłowo i czy ma prawo działać?;)...
Witam. Niedawno rozpocząłem swoją przygodę z Atmegą8. Chciałem sprawdzić jak działa interfejs TWI. Na podstawie książki pana Cezarego Klimasza zakupiłem układ 24c16wp i napisałem program. Niestety program zamiast wyświetlać mi w terminalu liczby od 255 do 0 wyświetla bliżej nieokreślone sekwencje znaków. Czy mógłby mi ktoś pomóc znaleźć błąd w moim...
Witam. Mam następujący problem z niedziałającym TWI. Mam kod na atmegę w C. /* Czujnik ultradzwiekowy sterowany z magistrali i2c C= 2010 Grzegorz Eliszewski grzegorz(at)eliszewski.pl esio.eu */ #define F_CPU 12000000UL // czestotliwosc kwarcu 12MHz #include <avr/io.h> #include <util/delay.h> // obsluga opoznien #include <compat/twi.h>...
Nie wiem jak sprawdzić tylko ten fragment... Tu masz "byka". ustawienie flagi :idea: Po wtóre: Powinien wyglądać np. tak: [syntax=c_loadrunner]static inline void I2C_WaitForComplete() {while (!(TWCR & (1<<TWINT)));}; // czeka na ustawienie flagi TWINT[/syntax]
... A jak się sprawa przedstawia kiedy sam TWI wpisze tam 1, czy przerwanie nie powinno się wtedy wyzwolić?... Powinno , ale pod warunkiem że : flaga I w SREG=1 i flaga TWIE w TWCR=1.Przed opuszczeniem procedury przerwania , należy wyzerować(wpisać 1) do flagi TWINT w TWCR , by uniknąć kolejnego przerwania. Piotrek
a wiec tak. jeśli dalej nie działa to mam jeszcze 2 pomysły. 1. zmniejszyć rezystory podciagające do 4,7Kohma 2.gdzieś czytałem że zapis w rejestrze TWDR jest możliwy tylko gdy bit TWINT w rejesrze TWCR jest zerem. gdy chcemy cos wpisać do TWDR to najpierw musimy go ręcznie wyzerować (bit TWINT). niech kolega spróbuje to uwzględnić. ja w moim programie...
Opierałem się na dokumentacji pamięci atmela ponieważ do swojej nie mogłem znaleźć (oznaczenia na obudowie: ATMLU740 NZ7F6197). Trzeba dysponować oryginalną dokumentacją, bo inaczej można pobłądzić w podstawowych kwestiach. Chyba, że gdzieś jest powiedziane, że są to zamienniki. Więcej na temat zachowania się magistrali wiedzielibyśmy znając status,...
Witam. Artykuł ten pisałem z myślą o wszystkich, którzy dopiero zaczynają swoja przygodę z magistralą TWI (czyli magistralą I2C) w procesorze Atmega8. Jest to program-szkielet, w który trzeba wpisać własne funkcje i procedury i wykorzystać gotowe procedury do komunikacji w magistrali TWI. A na praktyczne zastosowanie magistrali TWI zapraszam na: http://www.elektroda.pl/rtvforum/topic13...
co robią w środku te funkcje? niestety nie uzywam bascoma - tu masz takie proste funkcje w C [syntax=c] #define SCL_CLOCK 100000L void I2Cinit(void) { TWSR = 0; TWBR = ((F_CPU/SCL_CLOCK)-16)/2; } uint8_t I2Cstart(uint8_t addr) { uint8_t tw; TWCR = (1<<TWINT) | (1<<TWSTA) | (1<<TWEN); while(!(TWCR & (1<<TWINT))); tw = TW_STATUS...
Kiedyś napisałem coś takiego ale dla eeprom 32[syntax=c]/***************************... // Procedura zapisu bajtu do zewnętrznego EEPROM-a // AT24c32 DZIAŁA ! char WriteTW (u16 a, char d) { char e = 0; TWCR = (1<<TWINT) | (1<<TWSTA) | (1<<TWEN); e++; while (!(TWCR & (1<<TWINT))); if ((TWSR & 0xF8)...
[syntax=c] void TWI_wypiszZnaki2 ( char *znaki) { TWI_tran40 () ; while(*znaki) { TWDR = *znaki++; TWCR = (1 <<TWINT ) | (1 << TWEN ) ; while ( !( TWCR &( 1 << TWINT ))) ; } TWCR = (1 << TWINT ) |( 1<< TWEN ) | (1 <<TWSTO ) ; } [/syntax] tylko pamiętaj, że string musi być zakończony \0 (każdy string stworzony...
kiedys wykorzystywalem te funkcje do komunikacji z pcf8583 i bylo wszystko OK. Mysle ze problem tkwi gdzies w programie dla SLAVE bo tego nigdy nie robilem. a Jesli chodzi o te funkcje od adresowania i wysylania danych to wygladaja one nastepujaco: void I2CSendAddr(unsigned char addr, unsigned char rd) { // adres podawac jako 8 bitow ostatni...
Znalazłem podobny temat https://www.elektroda.pl/rtvforum/topic8... ale za bardzo nie mogę zrozumieć odpowiedzi (późna godzina może). Jaki adres ukłądu w końcu powinienem użyć? Poniżej daję kod, który nie działa (funkcja zwraca false). Prośba o spojrzenie, co robię źle. Z pamięciami eeprom pierwszy raz się spotykam. Od razu pytanie odnośnie...
Zerknij tu jak jest wykonywany odczyt z linii i porównaj [syntax=c] #ifndef _AVR_TWI_ #define _AVR_TWI_ #ifndef TWI_SPEED #define TWI_SPEED 100000 #endif void twi_init() { TWBR = (F_CPU / TWI_SPEED - 16) / 2 + 1; } void twi_start() { TWCR = (1<<TWINT)|(1<<TWSTA)|(1<... while (!(TWCR & (1 << TWINT))); } uint8_t twi_read_byte(uint8_t...
Witam Ostatnio postanowiłem opanować komunikację z DS1307. Napisałem sobie funkcję odpowiedzialną za zapis danych do tego RTC. DS1307_write: void DS1307_write(unsigned char adress, unsigned char data[]) [syntax=c]{ TWCR = (1<<TWINT) | (1<<TWSTA) | (1<<TWEN); // START while (!(TWCR & (1<<TWINT))); // czekaj if ((TWSR &...
Witam Od kilku dni usiłuje się połączyć układ ATMega8 z PCF8574P. Na początek chciałbym migać wszystkimi diodami podłączonymi pod wyjścia układu PCF... Napisałem program, ale co bym nie zrobił to i tak tylko lekko świecą diody. A0 A1 A2 podłączone do masy. Rezystory podciągające są i próbowałem różnych wartości 2,7k, 1k, 10k, ale i tak nie działa. ATMega8...
Doszedłem to tego że to napewno nie wina PCF'a, bo podlaczajac go do Portu Com w PC sprawdziłem ze działa dobrze i się nie zawiesza. Procedura PCF8574_set_oputputs() też jest dobra, też nie zawiesza nic, mimo zmiany wyjścia 7 z 1 na 0 i odwrotnie. Wina zatem musi leżeć w procedurze PCF8574_get_inputs(). #include <avr/io.h> #include <avr/rs232.h>...
Witam Mam problem z uruchomieniem I2C na atmega8. To znaczy program zawiesza się po wysłaniu pierwszej komendy na magistralę. Program się kompiluje ale nie działa w Proteusu main: #define F_CPU 8000000UL #include <avr/io.h> #include <util/delay.h> #include "TWI.h" void MCP(unsigned char devAddr, unsigned char regAddr, unsigned...
Szanowni Forumowicze, mam pewien problem z przeniesieniem tych funkcji: [syntax=c]void i2c_start(void) { TWCR = (1 << TWINT) | (1<<TWEN) | (1 << TWSTA); while (!(TWCR & (1 << TWINT))); } void i2c_stop(void) { TWCR = (1 << TWINT) | (1 << TWEN) | (1 << TWSTO); while (!(TWCR & (1 << TWSTO))); } void...
Witam Spójrz na mój artykuł o I2C czyli TWI na procesorze Atmega8 jest tam też sposób wykorzystania - kodowania układu PCF8583 i układu PCF8574AP (układ PCF8574AP to to samo co PCF8574A). Pisałem ten artykuł z myślą o początkujących kolegach zobacz może coś wybierzesz z mojego kodu a jest to zegarek z wyświetlaczami LED(SA10-21GWA) i układem PCF8583...
Udało mi się odczytać ten bajt. Okazało się, że sam format wywoływania był zły (a raczej jego końcówka odpowiedzialna za sam odczyt). Poniższy kod działa już bez zarzutu: odczytbajtu: SER W OUT TWBR, W CLR W OUT TWSR, W LDI W, (1<<TWINT)|(1<<T... start OUT TWCR, W; jw RCALL wait IN W, TWSR CPI...
Witam, Napisałem wysyłający do PCF8574 dane po TWI ale niestety układzik wogóle nie reaguje. Co może byc nie tak? Fragment programu odpowiedzialny za wysyłanie poniżej. Podprogram wyslij wywoływany jest w przerwaniu Timera1 wyslij: rcall start_twi rcall twint_set rcall twi_adr rcall twint_set rcall twi_data rcall twint_set rcall stop_twi ret start_twi:...
C nie znam ale: TWCR = (1<<TWINT) | (1<<TWEN); powoduje odczyt z PCFa bez ACK. Czyli PCF powinien zerwać transmisję. Aby odczytywać z ACK to ustaw jeszcze bit TWEA. No ale widzę że czytasz 1 bajt więc robisz to jako NACK bo bajt jest ostatni, czyli jest ok. Jednak aby wyświetlić na lcd E3 to czekasz w pętli na ACK które przecież nie przyjdzie...
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...
Mam problem z uruchomieniem tda7315. Mianowicie napisałem program do obsługi szyny I2C no i wszystko wydaje się wysyłać poprawnie (mam podłączony lcd i wszystkie instrukcje się wykonują), a na wyjściu cisza. Wysyłam najpierw adres tda7315, który jest 0x80, a później 0x20, który według noty to -40dB [syntax=c]#include <avr/interrupt.h> #include...
Witam Od kilku dni męczę się z magistralą i2c(twi) w atmega8 ,chcę podpiąć expander PCF8574a. Znalazłem bibliotekę i2c.h do obsługi pcfa,działa na niej zadawanie stanów, problem jest z odczytem gdy zmienie stan fizycznie przyciskiem np.(z niskiego na wysoki) on i tak odczyta to co miał wpisane poleceniem. Mam wrażenie, że coś jest nie tak z tą biblioteką...
witam ja odczytuje z pcf8583 tą procedurą (co prawda układem atmega8, ale atmega16 różni się ilością wyprowadzeń, natomiast rejestry sterujące są takie same): //0x03 - odpowiada minutom? -> tak co do pytania Program się zapętla. Najprawdopodobniej przy tej linii: Kod C while((TWCR&(1<<TWSTO))); W funkcji TWI_stop(); -> przeanalizuj procedurę...
Nastąpiła mała zmiana. Przeżuciem się na ATmegę32 oraz napisałem cały kod od nowa. Oto poniższy kod (main): [syntax=c]#define F_CPU 16000000UL #include <util/delay.h> #include <util/twi.h> #include <avr/io.h> #include <avr/interrupt.h> #include <stdio.h> #include <stdlib.h> #include "HD44780.h" #include "DS1307.h"...
Użyj sprawdzonych bibliotek do zegara. Pamiętaj o rezystorach podciągających. [syntax=c] void TWI_inicjacja(void) { // Czestotliwosc TWI(i2c) = 100kHz (max 100kHz) -> atmega8 taktowana wewnetrznie 8MHz (RC=8MHz) // ----------------------------------------... /* TWSR = TWS7 TWS6 TWS5 TWS4 TWS3 - TWPS1 TWPS0 */ TWSR =0b00000000; // Preskaler =...
Witam, Tworzę projekt, który zawiera w sobie odczytywanie wartości akcelerometru (MPU 6050), który komunikuje się z atmega8, a ten z kolei wyświetla informacje na wyświetlaczu. Całość opiera się o I2C. Korzystam z tej inicjalizacji I2C: [syntax=cpp]#include <avr/io.h> #include <avr/interrupt.h> #include <avr/pgmspace.h> #include <util/delay.h>...
Witam, pisałem kiedyś soft do obsługi TDA7439 na ATmega8, nie chce mi sie sprawdzać, czy adresy rejestrów 7449 są takie same, ale nawet jesli nie są, to żaden problem pozmieniać je w definicjach zgodnie z kartą katalogową. Poniżej kawałek kodu, którym do sterowania: // TWI - Two Wire Interface #define SLA_W 0x88 // Adres urządzenia slave (TDA7439)...
ZbeeGin: "przerwanie jest gdzie indziej" Nie mogę się dopatrzeć- może też się czegoś dowiem. W obu są w rejestrze TWCR- TWINT(7) i TWIE(0). Chyba że jeszcze czegoś nie dopatrzyłem... Adresy rejestrów są inne- ale przyznaję się bez bicia że założyłem iż kompilator zna nazwy rejestrów . Chyba że I2C jest programowy- to może być problem.
Witam Mam problem z obsługą enkodera(EC16-2-F-L20). Opierałem się kodach które znalazłem w internecie i nie wiem czemu enkoder w poniższym kodzie działa tak jak mu się podoba, przełącza stacje radiowe przypadkowo. Bardzo prosił bym o pomoc, z góry dziękuje. ; // Zapis tablicy TWCR = (1<<TWINT) | (1<<TWEN); // Wysłanie dnaych while (!(TWCR...
Dzięki Mick ale jakoś nie mogę załapać , w c pisze od niedawna. To co znalazłem w sieci trochę bardziej rozumiem tylko nie wiem w jakiej kojejnosci to ma być wykonywane wzorowałem sie bascomem... Jakby ktoś mógł to proszę o wyjaśnienie co ma byc pierwsze Pozdrawiam /***************************************... * Title:...
Witam, Czytalem wiele postow na ten temat, skorzystalem z wielu kodow i dalej nie moge uruchomic komunikacji pomiedzy dwoma atmega8. Siedze nad tym od dobrych paru dni i nie wiem czy to wina sprzetu czy programu?? (miedzy innymi bazowalem na kodzie z postu #include <avr/io.h> #include <avr/interrupt.h> #include <stdlib.h> #include...
twint przerwanie fusebits atmega8 atmega8 nestor
obciążenie kabel przekroić domofony breloki ciśnienia naczyniu przeponowym termet
prostownik automatyczny schemat jabra elite
Harman Kardon AVR 645 – brak Bluetooth, jak dodać łączność bezprzewodową? Korg PA500 - wyświetlacz nie działa, możliwe przyczyny