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]
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]
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. .
dzieki cav za mertoryczną odpowiedz, mam jeszcze jedno pytanko, oto co dzieje się z flagą TWINT podczas typowej operacji na magistrali I2c TWINT=1 -stan flagi przed programowym zerowaniem TWCR=(1<<TWINT)|(1<<TWEN); -zerowanie flagi poprzez przypisanie jej logicznej jedynki TWINT=0 -stan flagi po programowym zerowaniu (trwa przesyłanie danych...
... 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
Strona 172 • Bit 0 – TWIE: TWI Interrupt Enable When this bit is written to one, and the I-bit in SREG is set, the TWI interrupt request will be acti- vated for as long as the TWINT Flag is high.
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.
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);[...
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...
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...
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...
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...
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...
[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...
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)...
Ok znalazłem powiedzmy przyczynę błędu. Udało mi się zdebugować układ. Po odpaleniu kodu który wkleiłem kilka postów wyżej dostaję komunikaty: Error: TWSR & 0xF8 != MT_SLA_ACK oraz Error: TWSR & 0xF8 != MT_DATA_ACK Co o tym sądzicie? Uwaga Uwaga!! Udało mi się osiągnąć cel :) Oto działający kod dla urządzenia o adresie 0b0100100 + 0 <- zapis...
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...
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 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...
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 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...
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...
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 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...
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ę...
Właśnie doszedłem do tego... W nocie EEPROM-u jest to nawet napisane. Dokładnie że zapis będzie trwał max 5ms... Tutaj gotowe, działające procedury jakby ktoś chciał: ;***************************************... ;Ustawienie zegara Fscl = 100kHz ;Wzór na stronie 167 noty aplikacyjnej Atmega8 sbi DDRC, 4 sbi DDRC, 5 ;piny TWI jako...
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...
[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...
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 =...
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"...
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ę...
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>...
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.
Jak włączam BBcode to właśnie jakieś krzaczki mi się robią - nie mam pojęcia dlaczego. Co do transoptora - miała to być swego rodzaju izolacja, ale chwilowo jak już wcześniej zostało wspomniane wszystko jest na wspólnym VCC i masie, więc równie dobrze mogłoby go nie być. Co do długości obsługi przerwania - czy argument, że krócej się nie dało zrobić...
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ą...
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...
http://obrazki.elektroda.pl/3014732000_1... witam, Proszę o pilną pomoc w uruchomieniu komunikacji między dwoma atmegami. Sklejam projekt inzynierski (quadrocopter)i prace staneły na module komunikacji radia z plytą główną po i2c. W skrócie ; -odbiornik rc 2,4GHz daje na wyjsciu 8 PWM -konwertuje PWM na PPM -atmega8 analizuje PPM i...
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)...
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...
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...
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:...
Rozwiązałem problem, okazało sie, ze błąd leżał w programie. Mianowicie na końcu transmisji zamiast sprawdzać czy wyszedł bit stopi sprawdzałem TWINT. Na małych prędkościach działało, na wyższych już nie. Z takimi ustawieniami jak w poprzednim poście, na 62.5kHz działało bez problemu. Natomiast potem poszedłem o krok dalej i okazało się, że układ prze...
Witam Mam problem z wysłaniem bajta danych przez TWI, procesor ATMEGA8. Funkcje obsługi TWI TWI pisałem samodzielnie na podstawie informacji w internecie. Zawarte są w pliku I2C http://obrazki.elektroda.pl/1723049600_1... Wydaje mi się że po bajcie zawierającym SLA+W brak potwierdzenia ACK. Może ktoś podpowiedzieć co jest przyczyną braku...
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...
Cześć, Złożyłem układ według schematu http://obrazki.elektroda.pl/5126052200_1... Za nic jednak nie mogę zmusić ich do poprawnej komunikacji. Kod Atmega8 (TWI Master): [syntax=c] #define F_CPU 12000000UL #include <avr/io.h> #include <stdlib.h> #include <avr/interrupt.h> #include <util/delay.h> #include <inttypes.h>...
Walcze z uruchomieniem tego wyświetlacza. Znalazłem bibliotekę do jego obsługi i zacząłem sklejać własny program korzystając z napisanego dawniej programu do TWI (stąd różnojęzyczne nazwy procedur). W pętli głównej umieściłem miganie LEDem, co by wiedzieć czy nie utknął w którymś z while'ów w obłudze TWI. Początkowo się zawieszał, coś pozmieniałem i...
void i2c_init(void) { TWBR = 0xff;//0x04; } unsigned char i2c_start(void) { TWCR = _BV(TWINT) | _BV(TWSTA) | _BV(TWEN); while (!(TWCR & _BV(TWINT))); return TWSR; } unsigned char i2c_write( unsigned char data ) { TWDR = data; TWCR = (1<<TWINT)...
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...
Mam problem z połączeniem dwóch ATmeg8 za pomocą sprzętowego TWI. Otóż chciałbym połączyć dwie ATmegi, z których pierwsza - SLAVE TRANSMITTER - obsługuje akcelerometr poprzez ADC i przekazuje dane drugiej - MASTER RECEIVER - która to z kolei wyświetla dane na wyświetlaczu LCD. Przewertowałem elektrodę, google, datasheeta ATmegi i znalazłem wydawałoby...
Zaczynam temat z TWI w avr i już na początku napotkałem problemy, poniższy program ma za zadanie ustawić godzinę na PCF8583 oraz odczytywać ja co przerwanie zewnętrzne INT0 z układu PCF8583 i wypisywać ja na wyświetlaczu LCD. Funkcje napisałem na podstawie książki Mirosława Kardasia. Mam pytanie czy do tego układu PCF8583 konieczne jest podłączenie...
Witam próbuje skomunikować ze sobą dwie atmegi za pomocą twi. Napisałem skrypt oparty o datasheet jednak mam pare watpliwosci.poszukalem po elektrodzie i nie znalazlem tematu ktory by odp na moje ptyania. Komunikacja wyglada nastepujaco. Jeden z kontrolerow bedzie Master Reciver a drugi slave transmitter. po inicjalizacji polaczenia slave ma przeslac...
Witam forumowiczów, zacząłem realizować projekt zegarka, kalendarza i termometrów z owego linku: http://obrazki.elektroda.pl/6128170300_1... Proszę o porady i sugestie jak można rozwiązać ten problem :P
Witam, dalej się męczę z tym tematem, co prawda nie mam zbyt wiele czasu na co dzień dlatego nie udzielam się zbyt często, a szkoda. Zmodyfikowałem kod programu wykorzystując przykłady z książki Pana Kardasia lecz dalej bez zmian, a nawet gorzej, teraz przy inicjalizacji ADXL345 program wchodzi do pętli STOP i już z niej nie wychodzi, nie mówiąc już...
Kod : Dodano po 1 Dodam jeszcze schemat w razie wątpliwości : http://obrazki.elektroda.pl/2474398400_1... I co ważne, pomyliłem się wcześniej, źle podłączyłem na płytce kondensator przy rezonatorze ( do Vcc zamiast do GND ). Teraz już jest podłączony dobrze, ale na wyświetlaczach są same 0 . Zamieszczę jeszcze za chwilę przebiegi czasowe...
Mam plytke prototypową EvbAvr04 i zacząłem bawić się komunikacją z zegarem RTC (DS1307) za pomoca TWI. Wysyłanie danych działą, ale odbiór danych wiesza program. Identyczne "symptomy" były w temacie http://www.elektroda.pl/rtvforum/topic24... tyle że problem nie tkwi w adresie zegara, bo sprawdziłem dokładnie. Podłączyłem też wykrywanie przerwania...
Dzięki, link pomógł. Jednak rejestrom GYRO_CONFIG i ACCEL_CONFIG trzeba przypisać wartości, początkowe nic nie dają. Teraz wartości na wyjściu się zmieniają, tylko problem jest taki że odczyt jest pojedynczy, za drugim razem jest pustka, tak jakby się zawieszał. A przecież wgląd w nie powinien być bez ograniczeń. Próbowałem dać lekkie opóźnienia pomiędzy...
Witam!! Odczytuję z czujnika oświetlenia TSL2561 wartości z dwóch kanałów. Na wartość jednego kanału składają się dwa rejestry 8 bitowe. Po odczytaniu wszystkich czterech (CH0_Low, CH0_High; CH1_Low, CH1_High) łączę je w dwa 16 bitowe. próbowałem tak: ch0 = (ch0_high<<8)| ch0_low, ale i tak: ch0 = (ch0_high*0x100) + ch0_low. Przez chwilę wszystko...
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ące kłopoty (błedy przy kompilacji). Zastanawiam się, czemu niektore rzeczy nie są opisane w ksiażce :/ Np. jak powinna wyglądać definicja I2C_Error? Jaka jest potrzebna biblioteka avr zeby niktore funkcje I2C były "rozumiane" przez kompilator? W programie głównym dodałem #include <util/twi.h> ale zostało kilka błędów. Proszę...
Już śpieszę z wyjaśnieniami. Wróżenia z fusów nie oczekuję, lecz w pełni zadowoliłby mnie fragment działającego kodu do usypiania i budzenia atmegi. Schematu niestety nie ma. Puki co, układ jest zmontowany na połączeniu pająka z płytkami uniwersalnymi. Nie mam niestety nawyku pisania komentarzy. Może to nieco utrudniać interpretację. Oto cały kod: [syntax=c]/*...
Witam Was. Tym razem mam problem z TWI. Po kilku nieudanych próbach usunąłem cały swój kod do obsługi TWI, i napisałem wszystko od nowa - inspirując się kodami TMF'a i Mirkka36 oraz Datasheetem Atmela. Otóż mam zegar PCF8563 i na początku chciałem się z nim skomunikować, tak aby generował mi sygnał z prędkością 1Hz na wyjściu CLKOUT. Przerwanie w ATmega8...
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...
Męczę się z tym problemem już od bardzo długiego czasu, więc postanowiłem wreszcie poszukać pomocy na forum. Mianowicie nie potrafię w żaden sposób sprawić by ten układ wysłał mi jakiekolwiek dane. Połączenie atmegi z kompasem jest poprawne ponieważ skaner wyszukuje jego adres: https://obrazki.elektroda.pl/8893125400_... Robiąc to bardziej...
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. Od kilku dni walczę z kodem do obsługi RTC DS1307 z atmega88. Niestety bezskutecznie - nic nie działa. Wszystko jest połączone dobrze bo z arduino wszystko działa. Mój kod jest zlepkiem kodów z tych stron: https://exploreembedded.com/wiki/Real_Ti... https://github.com/jarzebski/Arduino-DS1... Kod "rtc.c": [syntax=c] #include...
Witam. Wpadł mi w ręce czujnik temperatury i ciśnienia BMP180. Znalazłem w internecie sterownik tego czujnika, ale w celu samodoskonalenia i lepszego zrozumienia działania tego urzadzenia postanowiłem tez sam napisać taki sterownik. I teraz tak - sterownik, który znalazłem w internecie działa rewelacyjnie, wyświetlane ciśnienie odpowiada danym z okolicznych...
malenstwo przylutowane, pomogl mi w tym serdeczny kolega za co mu dziekuje bo sam bym sobie z tym nie poradzil ;) niestety nadal nie moge uruchomic czujnika, posiłkowałem sie artykułem zamieszonym w EP 8/2011 niestety bez rezulatatu (wgrywająć pliki zamieszczone na plycie CD niestety tez nie mogę nawiązać komunikacji z czujnikiem) Oto mój program: obsługa...
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>...
Witam, postanowilem rozlozyc sobie twi na czesci pierwsze jako ze to dosc skomplikowany interfejs, no i odrazu pojawil sie problem... Ustawiam sobie mega128 w MASTER RECEIVER oraz mega88 w tryb SLAVE TRANSMITTER. To co do tej pory udalo mi sie zrobic to to ze dostaje odpowiedz na start bit, tzn. TWSR=0xA8 dla SLAVE, a po stronie MASTER TWSR=0x40, czyli...
Stary temat ale podepnę się bo mam podobny problem. Próbuję skomunikować STM32F429 (płytka discovery disco) z Atmegą8 (nie 88). STM Master Reviever <<>> Atmega Slave Transmiter. Wzorowałem sie trochę na kodzie kolegi i trochę na tym tutorialu: http://eliaselectronics.com/stm32f4-tuto... Problem kolegi kolegi...
Witam, Próbuję od 0 zacząć przygodę z DS1307 dla Atmega8L ale jakoś mi nie wychodzi. Wzoruję się i przepisuje kod z http://obrazki.elektroda.pl/4411854700_1... Przyznam, że na pierwsze wojaże wydaje się to dosyć trudne, obsłużyć DS1307... [syntax=c] #include <avr/io.h> // Załaduj bibliotekę input/output #include <avr/interrupt.h>...
Chce użyć sprzętowego i2c w atmedze8. Znalazlem taka biblioteke na elektrodzie: //**************************************... // WARUNEK STARTU LUB PONOWNEGO STARTU TWI // funkcja zwroci 1 jezeli warunek startu lub ponownego startu nie zostal wystawiony // funkcja zwroci 0 jezeli warunek startu lub ponownego startu //**************************************...
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...
Witam, stworzyłem na płytce stykowej układ, gdzie podłączyłem przyciski, LCD hd47780, rtc ds1307 i buzzer. Korzystam z bibliotek do wyświetlacza od "radzia", TWI od p. Mirka oraz ze znalezionej na tym forum biblioteki do RTC. Napisałem szybki program, który wyświetla godzinę w formie hh:mm:ss na ostatnich polach pierwszej linii. Dodatkowo dodałem przerwanie,...
hej robiw -> próbuję tę twoją procedurę powyżej ale za chiny nie chce mi się ani razu to przerwanie wywołać. Z drugiego procka próbuję do tego wysłać coś poprzez I2C w ten sposób: do I2cstart 'Start I2cwbyte 128 ' adres układu SLAVE I2cwbyte 65 ' dana do przesłania do Slave I2cstop 'Stop wait 1 loop na magistrali mam jeszcze PCF8583 i z niego odczyt...
Witam. Mam niesamowita zagadke. Próbuje uruchomić TWI na mikrokontrolerze ATMEGA64-16PU. Problem jest nastepujacy iż TWI nie działa... :) Co ciekawe rejestr TWCR pokazuje cały czas wartość 10100100 czyli TWINT, TWSTA oraz TWEN mimo że wogóle nie inicjuje jego wartosci. Próbowalem w Atmedze 8 i kod działa bezproblemowo. Odczytujac w niej TWCR bez inicjacji...
Znalazłem taki kod ze strony: http://www.ulrichradig.de/home/index.php... [syntax=cpp] /*--------------------------------------... Copyright: Ulrich Radig (mail(at)ulrichradig.de) Author: Ulrich Radig Remarks: known Problems: none Version: 23.06.2011 Description: Brushless Motor Controller...
Witam Posiadam mikrokontroler Atmega8 podłączony do RTC MCP7940M. Komunikacja poprzez TWI [syntax=c] #include <avr/io.h> #include <inttypes.h> #include <util/delay.h> #include <hd44780.c> #include <stdlib.h> #include <avr/interrupt.h> #define F_CPU 1000000L void inicjalizacja(void); void start(void); void stop(void);...
Witam. Napisałem prosty program do odbioru danych z akcelerometru MMA7455L. W zasadzie chcę odebrać tylko 8 bits output value X adres: $06. Jednak na wyjściu funkcji read_czujnik() dostaje wartość 9C która zapewne nie jest przypadkowo wartością wpisywaną w TWI_write(0x9C); na chwilę przed odbiorem. main.c [syntax=c]#define F_CPU 8000000UL #include <avr/io.h>...
Witam! Nigdy wcześniej nie miałem styczności z I2C. Znalazłem w internetach regulator BLDC który udało mi się uruchomić(po przeróbkach). No ale regulator jest sterowany danymi z i2C. A ja totalnie tego nie ogarniam. Na obecną chwilę działa tylko z prędkością, którą wpiszę w zmienną przy programowaniu. Możecie dać mi jakąś rybę, jak mam wysłać dane do...
Mam problem z odczytem danych z jednego z czujników na mojej płytce a mianowicie z HMC5883L. Podłączony tam jest również MMA7455L który działa poprawnie. Chodzi dokładniej o to, że po odebraniu wartości spod adresu 0x03 (MSB z x) wartość którą odbieram jest równa 0,1 lub 255 (podczas obrotu dookoła). Przez co po złożeniu dwóch bajtów MSB i LSB dostaje...
Witam! Mam w slave taką oto funkcję odczytu z mastera: void TWI_read (uint8_t ilosc) { pbufor = &bufor[0]; for(; (ilosc-1) != 0; ilosc--) { TWCR = (1<<TWEN) | (1<<TWEA) | (1<<TWINT); while(!(TWCR & (1<<TWINT))); if(TW_STATUS...
Witam Z braku weny poprzeglądałem forum i znalazłem następujący kod: #include "lib/t6963c.c" #include <compat/twi.h> #include "lib/change_numbers.c" #include <avr/interrupt.h> #include <avr/signal.h> #define AVR_addr_R 0x18 volatile unsigned char buf_TWI[9]; unsigned char *pbuf_TWI; unsigned char temp_kotla,...
Witam wszystkich, mam duże trudności z nawiązaniem komunikacja z kompasem cyfrowym HMC5843 przez protokół I2C. Wszystko ma działać na atmega8 (master) 3,3v (at) 4MHz, bezpośrednio połączona z układem (slave). Pull-up'y na liniach SDA i SCL przez rezystory 4k7 są obecne. Komunikacja z prędkości 100kHz (sprawdzałem też dla 40 i 50kHz, efekt ten sam)....
Witam, Mam pewien problem. Mianowicie połączyłem dwie ATmegi 8 przez TWI, rolę pullup-ów pełnią rezystory w ATmedze która pełni funkcję Master Transmiter. Gdy wysyłam przez TWI jakąś wartość np 0b00001000, to w TWDR w Slave Receiver, w TWDR jest wartość 0b00010000, czyli ta wartość przesunięta w lewo o jeden bit. Co może być powodem takiego stanu rzeczy?...
Zmontowałem układ jak w załączniku. Jest to czujnik odległości. W zależności od odległości powinien zapalać odpowiednią ilość diód. Porogramu jeszcze nie napisałem ponieważ zatrzymał mnie poważny problem. Problem polega na tym, że i2c_start(Device+I2C_READ) zwraca 1, czyli (jak można przeczytać tutaj: #include <avr/io.h> #include <util/delay.h>...
Witam. Usiłuje uzyskac transmisje danych miedzy dwoma mikrokontrolerami : Atmega8 programowana w asemblerze i Atmega32 programowana w C. Do lini twi podpiete sa rezystory podciagajace 4,7K. Napisalem dwa proste programy, jeden w asemblerze dla Mastera a drugi w C dla Slave. Jednak komunikacja nie wystepuje.... (sprwdzanie kodow bladow TWSR po rs232)......
Zaprogramowałem sobie pamięć 24c512 w programatorze. Podłączyłem właściwie do atmegi (atmega pracuje z zegarem wewnętrznym 1mhz) i probuje go odczytać. To fragment programu: ldi r16,(1<<TWPS0);inicjalizacja out TWSR, r16 ldi r16,18 out TWBR, r16 ldi r16,(1<<TWEN)|(1<<TWSTA)|(1&... out TWCR,r16 czekaj_na_start: in r16,TWCR...
Czy jeśli chce użyć TWI to czy musze jakoś bezpośrednio ustawiać rejestr DDR odpowiednich pinów czy może ich ustawienie kontroluje uC? Czy ten kod jest wystarczający do wysłania danych do procesora audio TDA7318? Komendy w funkcji send_to_I2C() przepisałem z noty katalogowej Atmega8. Zastanawiam się tylko czy moja funkcja i2C_init() jest wystarczająca...
Witam, Zmagam sie z termometrem... TMP75 - moze ktos obeznany z tematem twi (zeby nie pisac i2c - bo czesto sie to kojarzy z software'owym rozwiazaniem i2c) zerknie przychylnym okiem.... w czym tkwi problem ? - wartosci jakie mi zwraca to 255 i 255 :( ponizej czesc kodu odpowiedzialnego za TWI i TMP75: void i2c_init(void) { // kwarc 11059200...
twint przerwanie atmega8 nestor fusebits atmega8
blaupunkt szumi sterowanie rolet zewnętrznych kabel ampery
zarówka punto archiwizacja danych dysku
Bezpiecznik do elektryki lusterek w Chevrolet Potencjometr balansu nie działa we wzmacniaczu