Teraz trochę zgłupiałem, jak to powinno wyglądać w programie. Dostaje przerwanie od TWI i co dalej? Jeśli nie wpisuje 0 do TWINT to program zapętla się w przerwaniu. The TWINT Flag must be cleared by software by writing a logic one to it. i poczytaj ten temat: http://www.elektroda.pl/rtvforum/viewtop...
Nie potrafię dojść o co chodzi - rozumiem gdyby program zatrzymywał się na while(), ale na return()? Samo przerwanie TWINT nie oznacza, że operacja zakończyła się powodzeniem. Nie podałeś zawartości innych funkcji obsługi magistrali, ale sądząc po funkcji twi_read() nie sprawdzasz poprawności transmisji poprzez sprawdzenie jej statusu w rejestrze TWSR....
... 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
Witam, hmmm czy może być powodem to, że jeśli dokonuję dość długich procedur w obsłudze przerwania TWI to może się właśnie tak zdarzyć, że jakby nakładają się na siebie 2 przerwania i to ze statusem &HA8 zostaje "zeżarte" ??? Tak to brzmi z tego co piszesz, ale z drugiej strony slave powinien "przetrzymać" SCL w stanie niskim tak długo, jak długo nie...
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! Chciałem zasięgnąć rady bardziej doświadczonych kolegów. Sprawa wygląda następująco - skonstruowałem dość proste urządzenie, które jest licznikiem impulsów (z licznika energii elektrycznej). Oczywiście w dalszej perspektywie będzie miało nieco więcej funkcji niż zliczanie impulsów. Problem tkwi w tym co zrobić ze zmienną przechowującą liczbę...
Dokładnych instrukcji Bascoma nie podam, bo piszę w asm. Ale zasady ogólne : 1. Generujesz start (TWCR), w TWDR wstawiając adres oraz bit R/W. 2. W obsłudze przerwania dzieje się cała reszta. Na początku czytasz TWSR i w zależności od jego wartości postępujesz dalej, albo wstawiając do TWDR kolejne dane, albo kończac transmisję warunkiem stopu, albo...
Witam, mam problem z przerwaniem modulu TWI w symulatorze AVR STUDIO. Program pisalem w C , obsluga przerwan globalna i TWIE ustawione.... Gdy ustawie recznie flage TWINT program nie przechodzi do wektora przerwania, tak jakby nic sie nie stalo. Nie wiem czemu tak sie dzieje, napisalem to samo w assemblerze i reczne ustawienie tej flagi wywoluje przejscie...
Zgodnie z dokumentację na stronie 4: http://www.atmel.com/dyn/resources/prod_... Przerwanie generowane jest gdy: The TWINT Flag is set in the following situations: After the TWI has transmitted a START /REPEATED START condition After the TWI has transmitted SLA+R/W After the TWI has transmitted an address byte After the TWI...
Po 1 rozumiem, że TWI służy do komunikowania z PCF8583 Aktualnie nie ma znaczenia z czyms się komunikuje. Bo TWI nie daje znaku życia. Czyli w TWSR stan się nie zmienia, TWINT się nie ustawia. Po 2 to nie rozumiem do czego służyć ma przerwanie od TWI, przecież mamy konfigurację master-slave a w takiej konfiguracji slave tylko odpowiada na zapytania....
Witam, W przerwaniu RX USARTa (asynchroniczne 38400, po odebraniu odpowiedniego bajta) chciałbym wysyłać dane (Start, Adres, 2 bajty, Stop) korzystając z TWI (nie wykorzystując przerwania od TWI co oczywiste) przy f magistrali 400kHz. O ile czasowo przerwanie się wyrobi o tyle zastanawia potencjalna możliwość powieszenia układu w przypadku padnięcia...
Wróciłem z rozważaniami do ATmegi32 i płytki prototypowej. Porty mam sprawne i mam na nich stany wysokie, podciągnięte rezytorami 1.5k, więc sprzętowo wszystko wygląda OK, natomiast przy próbie odczytu wszystko staje. inicjalizacja poszla cos tam wyslalem CZYTAM I na tym koniec. Dodam że podczas "zwiechy" port SCL jest na stanie niskim, wymuszonym przez...
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. 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...
Light'I , szczerze mówiąc nie wiem o co Ci chodziło. Pomyliłem TWINT z TWIE ... ;) Po prostu jest przerwanie od TwoWire i na nim można alternatywnie się oprzeć.
W tygodniu nie mam tyle czasu i zapału żeby zgłębiać temat, także program wciąż wygląda tak: Efekt wciąż ten sam. Jeśli zmienie tryb uśpienia na IDLE działa jak należy Jedyne co mi przychodziło do głowy to to że może POWER DOWN miesza coś w rejestrach dot. przerwań, ale nigdzie nie znalazłem żadnej takiej informacji. Próbowałem także dodawać ustawienia...
[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...
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.
No ale co ja na ten moment mogę więcej dodać? To, co wrzuciłem w trzech wersjach to praktycznie cała funkcja main(); . Kod do obsługi TWI i wstępną inicjacje proca mam takie: sei(); powoduje restart, tylko po jej zastosowaniu program dochodzi do momentu, gdzie powinien nastąpić odczyt z magistrali TWI. Przyznam, że korzystam z gotowca ale może ta funkcja...
Z Bit 7 – TWINT: TWI Interrupt Flag This bit is set by hardware when the TWI has finished its current job and expects application software response. If the I-bit in SREG and TWIE in TWCR are set, the MCU will jump to the TWI interrupt vector. While the TWINT flag is set, the SCL low period is stretched. The TWINT flag must be cleared by software...
LordBlick - i znów się nie zrozumieliśmy ;) Odczytu z I2C nie robię w przerwaniu, w przerwaniu od zegara PCF ustawiam flagę i potem w pętli głównej, jeśli flaga jest ustawiona, odczytuję czas. Czyli plus-minus co sekundę. Z kolei odczyt z modułu drugiego jest wykonywany w pętli głównej programu przy każdym jej wykonaniu, niezależnie od jakichkolwiek...
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...
Drobne pytanie (at) DosinskY , dotyczące procedurki poniżej : 1. Co bedzie, jak w TWDR będzie 1 - błąd nie występuje ? :P unsigned char twi_rd(unsigned char ack) { if (ack == 1) { TWCR |= 0b10000000; // wyzeruj flage TWCR.TWINT } else { TWCR &= 0b10111111; // wyzeruj flage TWCR.TWINT & TWCR.TWEA }; while (!(TWCR...
Oto skomentowany kod: [syntax=c]int main(void) { //DDRD |= ((1<<PD0) | (1<<PD1)); sei(); TIMSK |= (1<<TOIE0); //Przerwanie overflow dla timer0 TCCR0 |= (1<<CS01); //Preskaler 8 TCNT0 = 131; //Początkowe wypełnienie timera while(1) { lcd_init(); } return 0; } ISR(TIMER0_OVF_vect) { TCNT0 = 131; //Początkowe wypełnienie timera...
Witam! Na forum zawsze znajdowałem odpowiedzi i drążyłem każdy temat samodzielnie w myśl zasady jednego z moich wykładowców "świat dzieli się na samouków i nieuków"... lecz tym razem rozłożyłem ręce po 3-dniowej walce z TWI/i2c (w między czasie wypiłem tylko 2 bro) i postanowiłem nieśmiało założyć temat (chyba mój inauguracyjny...). Przeczytałem regulamin...
Witam!!! Od dłuższego czasu mam problem bo nie działa mi w ogóle zapis do rejestrów Pcf-a. Nie mam pojęcia co może być tego przyczyną może ktoś coś poradzi. Poniżej przedstawiam kod. [syntax=c] #include<avr/io.h> #include<avr/interrupt.h> #include<util/delay.h> #include<avr/iom8.h> #define TOGL PORTD ^=(1<<PD6) void TWI_start(void);...
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...
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 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. Mam problem z odczytem przez TWI, tzn w programie zamieszczonym ponizej najpierw zapisuje do pamieci podlaczonej przez TWI 2 wartosci, a pozniej gdy chce je odczytac, pierwsza odczytana wartosc jest bledna, natomiast druga dobra. Mysle, ze moze to byc blad w funkcji i2c_readAck, gdyz i2c_readNak jak powiedzialem odczytuje poprawna wartosc. A...
Build started 10.10.2010 at 13:19:40 avr-gcc.exe -mmcu=atmega32 -Wall -gdwarf-2 -std=gnu99 -DF_CPU=16000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT main.o -MF dep/main.o.d -c ../main.c In file included from c:/avr/winavr/lib/gcc/../../avr/include/... from c:/avr/winavr/lib/gcc/../../avr/include/...
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
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...
Witam, jak w temacie, czyli źle wyświetlają mi się cyfry na LCD w sensie tak chcą ( 00 -> 01 -> 00 -> 01 -> 00 -> 08). Nie wiem po jakiej stronie leży problem. Pracuje na płytce ewaluacyjnej GOTRONIK z Atmega32A z RTC PCF8583 ( INT-PD2, A0-GND, SDA-PC1, SCL-PC0) Umieszczam kody programu: Main.c [syntax=c]#define F_CPU 16000000L #include...
Witam Mam problem z transmisją I2C po wybudzeniu uC. Jeśli uśpienie nie było zbyt głębokie (tryb IDLE) transmisja I2C działa bez problemów. Jeśli uśpienie było głębsze (np. POWER DOWN) po wybudzeniu nie działa magistrala I2C. Aby ponownie zaczęła działać konieczny jest RESET uC. Napisałem krótki program ułatwiający analizę problemu. plik main.c: [syntax=c]#include...
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...
Program na GLCD skleiłem z dwóch bibliotek - I2C Slave TMF (pierwsza książka) oraz obsługa wyświetlacza autorstwa "SunRivera" udostępnionej przez niego na Dropie. Podejrzewam, że mogłem coś namieszać w I2C - biblioteka była pisana na Atmega 88, ja skompilowałem ją na Atmega32. Kompilator protestował przeciwko obecności rejestru "TWAMR", którego 32 nie...
To co napisałem o STOPie nie miało związku z twoim aktualnym problemem, była to po prostu rada, która rozwiąże kolejny problem jaki byś miał - zawieszający się czujnik. Co do komunikacji z układem, co z odczytem/zapisem pozostałych rejestrów? Spróbuj, może to ci pomoże znaleźć źródło problemu. Pozdrawiam, GSM Ahhhha :) No w sumie racja. Komunikację...
Witam Uruchomiłem kod z książki tmf`a do obsługi i2c w avr jako slave. Problem w tym, że o ile przesłanie pojedynczych danych działa doskonale. To jeżeli chcę przesłać dane na podstawie odebranej wartości to bit TWDR przyjmuje wartość adresu odbioru, a master zawiesza się. Przerwanie: [syntax=c]ISR(TWI_vect) { uint8_t status = TW_STATUS; switch(status)...
ZROBIŁEM :D :D :D :D Okazało się, że myślałem dobrze tylko ścieżka była przerwana :/ Uruchomiłem na TWI więc dużo roboty nie było. A jak by ktoś pytał jak czytać temp z ds1621 to inforumuję(tzn u mnie działa a na razie inaczej nie próbowałem): -używać rezystorów podciągających ( u mnie 4,7k) -adres 1001000 DS1621 uzyskałem przez zwarcie nóżek adresowych...
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,...
Witam, Panowie na poważnie wziąłem się za TWI Slawe ale za pomocą własnej obsługi w Bascomie. Na podstawie szukajki na elektrodzie i kilku postów kolegów zdaje się szymtro i robiw udało mi się w końcu zrobić to aby AVR zaopatrzony w sprzętowe TWI grzecznie odbierał przesyłane do niego bajty. Zrobiłem to tak: Twar = &B10000000 'Adres=128, jeśli chcesz...
W linijce: < w nawiasie (1<TWEN), i to nie jest odosobniony przypadek. Poza tym zamiast TWCR |= ... wystarczy zwyczajnie TWCR = ... . Tak zresztą jest w nocie mikrokontrolera ATmega16, na podstawie której pisałeś ten kod :)
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...
https://obrazki.elektroda.pl/6506291700_... Witajcie moi drodzy. Przetestuję tutaj sterownik/ściemniacz WiFi jednokolorowego paska LED kompatybilny z aplikacją SmartLife. Potem pokażę jego wnętrze oraz naszkicuję jego schemat. Sprawdzę również jak duże prądy jest w stanie on znieść i naprawię drobną jego usterkę która powstanie na...
Witam, znalazłem na forum podobno działający kod do obsługi TWI. Ale u mnie jest problem z jej obsługą. Wysyłanie bajtów nie powoduje błędów, ale za to jak chce odczytać jakąś wartość to program się zatrzymuje w miejscu (zaznaczone w kodzie do którego miejsca dochodzi). Dodam że INT z RTC działa prawidłowo, układ nie wydaje mi się żeby był wadliwy....
Witam W poniższym programie chciałem na przemian zaswiecać i gasić diode po zliczeniu przez zegar RTC jakiegoś czasu np (1 sekundy). [syntax=c]#include<avr/io.h> #include<avr/interrupt.h> #include<util/delay.h> #include<avr/iom8.h> #define TOGL PORTD ^=(1<<PD6) void TWI_start(void); void TWI_stop(void); void TWI_write(uint8_t...
Witam! Usiłuje zasymulować obsługę magistrali I2C na procku ATmega128 w AVRStudio 4. Prosty kod źródłowy w assemblerze znajduje się w manual'u (str. 212). Problem w tym, że to nie działa. Mam problem z wyzerowaniem bitu TWINT w rejestrze TWCR (zeruje sie go wpisując 1).Poniżej zamieszczam fragment programu - inicjalizacja TWI i wystawienie bitu startu...
Witam ponownie, Zmieniłem zarówno program mastera jak i slave'a. Sprawdzałem mnóstwo razy kody i wszystkie ustawienia rejestrów w poszczególnych częściach komunikacji TWI wydają się być prawidłowe, jednak nadal TWI nie chce działać. W kodzie slave'a dodałem ustawienie bitu TWIE w rejestrze TWCR, czyli odblokowanie przerwań. Zmieniłem również ustawienia...
https://obrazki.elektroda.pl/7497767200_... Witajcie moi drodzy. Przedstawię tutaj krótki test i wnętrze ciekawej ładowarki USB (trzy porty 5V i jeden QC). Ładowarka ta reklamowana jest przez producenta jako 'samochodowa' i wymaga zasilania napięciem od 10V do 36V, czyli zasadniczo to jest taka przetwornica step down z dodanymi osobno...
serialin przerwanie przerwanie timer0 zewnętrzne przerwanie
taśma sygnałowy podłączyć blokady zamienników przydomowy oczyszczalnia ściek
Wymiana linki pokrywy silnika Hyundai i40 - instrukcja Jak zbudować zgrzewarkę punktową z prostownika 12V?