Fórum témák
» Több friss téma |
WinAVR / GCC alapszabályok: 1. Ha ISR-ben használsz globális változót, az legyen "volatile" 2. Soha ne érjen véget a main() függvény 3. UART/USART hibák 99,9% a rossz órajel miatt van 4. Kerüld el a -O0 optimalizációs beállítást minden áron 5. Ha nem jó a _delay időzítése, akkor túllépted a 65ms-et, vagy rossz az optimalizációs beállítás 6. Ha a PORTC-n nem működik valami, kapcsold ki a JTAG-et Bővebben: AVR-libc FAQ
Az eleje es vege változókat 8 bitesnek deklarálod aztán:
eleje=eredeti>>8; vege=eredeti;
Eljutottam a programozáshoz. Az egyik állitolag tesztelt gyári modult nem ismeri fel a programozo
![]() Betöltottem a HEX-t a Flashbe, de kiirta, hogy Flash byte at 0x0020 is 0x00 ( should be 0x41). Mi ilyenkor a teendö? Kösz
Atmega 644 eepromjába akarnék írni olvasni. De a ahogy néztem 2 byte-onként lehet írni olvasni. Bár az még nem sikerült. eeprom_write_word (uint16_t *addr , uint16_t value)
Adatlap 26. oldal:
C Code Example(1)
Ez egy 100-as értéket ír a 0. BÁJTBA:
6.43V-on egy AVR nem fog leégni, csak szólok. Esélyes hogy RESET-be megy, de tönkre nem megy.
Programoztam és teszteltem RC távirányítót aminél (sleep módban) kb. 7V-ot mértem a VCC és GND között. Azt hittem hibás, de amikor a gyártósorról csak ilyenek jöttek le és mind tökéletesen működött. Üzem közben (lenyomott gombbal) kb. 4.3V-on járt mind. A hozzászólás módosítva: Jan 31, 2015
A tudatlansag es a szerencsefaktor a legnagyobb ellensege a terverzesnek. Ha az adatlap azt irja, hogy Absolute Maximum Rating 6.0V es melle azt irja, hogy ezeket tullepve az alkatresz tonkremehet, akkor tok mindegy, hogy te lattal-e olyan alkatreszt, ami kibirt 7V-ot vagy nem. Attol, hogy valamit sorozatban gyartanak, legyen az RC taviranyito, az meg lehet rosszul tervezve.
A hozzászólás módosítva: Jan 31, 2015
Kérdés az, hogy érdemes-e hozzáadni egy diódányi nyitófeszültséget a transilhez.
A step-down kimenetére kötöm a transil diódát, utána rakok ez mezei 1A-s diódát, ezt pedig rákötöm a feedback lábra. A kimenet továbbra is 5V lesz, a dióda előtti rész 5.7V, ahová a transilt rakom. Ez után a kimenet garantáltan nem lépi túl a 6V-ot, viszont a diódán folyamatos áram lesz, mert 5.7V-on már nyit.
Elobb nezd meg, hogy a suppressoron tobb ampernel mekkora feszultseg esik, mert te 3mA-rel merted. Amikor amperek folynak rajta, akkor az szerintem feljebb megy. Adatlap. Szerintem a crowbar-nal biztosabb es jobb megoldas nem lesz. Az a baj, hogy 5V a tap kimenete, de az AVR-nek szerinted 5.5V (egy ATMega8A adatlap szerint 6V) a maximum. Nem nagyon ismerek olyan passziv alkatreszt, ami ezen a fel volton belul nyit ki meredeken. A zener talan, de azt valogatni kell, mert nem eleg pontosak.
Sziasztok!
Ismét hozzátok fordulok, mert valami triviális dolgot nem jól csinálok, és erre csak hétvégén van időm. Van ez az ltc1864-es, 16-bites ADC. Ennek a mintavételezési sebessége max. 250 kHz. A kontrolleremet egy 7372800-ás külső kristály hajtja. Úgy gondolom, hogy ezért az SPI órajelhez a 7372800-át legalább 32-vel kell osztani (így 230400 lesz), mert ha 16-tal osztom, akkor akkor túllépem a max. 250 kHz-et. (460800). Ha 16-tal osztom, akkor olvasok randomszerűen számokat, míg ha 32-vel, akkor mindig nulla az eredmény. A konverzióhoz szükséges idő legfeljebb 4 us. Ez körülbelül 30 órajelet jelent. (0.000004/(1/7372800)). A 16 adat kinyeréséhez 16 SPI órajel kell, ami 32-vel szorozva 512 rendes órajelnek felel meg. Az adatok mégsem jönnek. Pedig az analóg in+ bemeneten 2,3V-ot mérek, és a referencia feszültség 5V. Mennyit kellene mérnem? (30146-ot számolok. Természetesen átveszem a két bájtot, és egy 16-bites változóban egyesítem.) Mit csinálok rosszul? Minden segítséget előre is nagyon köszönök! LTC1864 Atmega2561 A hozzászólás módosítva: Jan 31, 2015
A mintavetelezes sebessege egesz mas dolog, mint az SPI orajel. Az lehet sokkal tobb, valami 20MHz, ahogy emlekszem. Az adatlapon ott van szepen, hogy mikor veszi a mintat az A/D, es hogy mikor lehet kiolvasni a konvertalas eredmenyet. Es az is, hogy a kiolvasaskor az SPI-n az IC-be beirt bitek mit jelentenek.
Igazad van, elnéztem. Nagyon köszönöm! A Clock frequency lehet 20 MHz is. Rögtön vissza is állítom az osztót. Ekkor azonban 256 rendes órajel jelent 16 SPI órajelet. Ehhez jön a konverzióhoz szükséges idő. Ami változatlanul 30 órajel körüli. A Timer3 OCR3B = 30 és OCR3A = 286 megszakítása (CTC Output Compare) billegtetné a CONV lábat. Sajnos, random értékeket olvasok. Gyakran fordul elő 257, ami ugye a két bájt alsó értéke.
![]() Még mindig az időzítés lehet a rossz? Vagy az is lehet, hogy itt nem jó valami?
Ha az OCR3B-t 30-ra és az OCR3A-t 286-ra állítom, akkor 0-kat kapok. Ha ugyanezeket felemelem 225 és 450-re, akkor viszont számokat. Nem jó számokat ugyan, de számokat. Valószínűleg nem jól számolok valamit. Ez az első SPI kísérletem. ![]() ![]() A hozzászólás módosítva: Jan 31, 2015
Itt van egy kód hozzá, az oldalon középtájt. Nem próbáltam ki hogy működik-e, de azt írják igen, tehát nagy valószínűséggel jó.
Ne másold be, hanem nézd meg hogy mi a különbség aközött és a te kódod között és gondolkozz hogy abban miért más. Csak így tanul az ember! +1: Ha új eszközzel akarsz kommunikálni ne legyen más kód, csak a kommunikáció és ami ahhoz kell, ha már működik belerakhatod a többit. Én új eszközök élesztésénél mindig RS232-USB konverterrek küldöm ki a laptopomnak, vagy ha van rajta LCD akkor esetleg azt bennehagyom.
Köszönöm szépen! Ezt már láttam, de nekem mivel pontos időzítésre lenne szükségem, muszáj az órával ütemeznem. Ebből adódóan a megszakításokkal kell lekezelnem. Vagyis hát kellene.
![]() ![]() Nincs más kód benne, csak az USART, meg ez. Valahogy látnom kell, hogy mit nem csinálok jól. ![]() A hozzászólás módosítva: Jan 31, 2015
Idézet: „I wrote library and i havent any response from LT1864. Where is mistake? .h” Azt írják, nem jó. ![]() ![]() A hozzászólás módosítva: Jan 31, 2015
Azért adtál egy jó ötletet. Hátha így egyszerűbb lesz.
![]()
Na, ezt találja ki valaki, hogy mitől lehet!
![]() Néhány x beírása után meg kellene hívódnia ennek a függvénynek:
Az ltcRead az előző példából van kimásolva.
A bármilyen eredmény helyett a bluetooth inicializálást kapom vissza.
Ennek a szövege jön, minden meghívásra. Csak nem értem. A hozzászólás módosítva: Jan 31, 2015
Ez megoldódott. Az interrupt-ot ki kellett kapcsolni.
A helyzet azonban nem lett jobb. Így is csak nullák jönnek. ![]() A hozzászólás módosítva: Jan 31, 2015
Sziasztok!
Timer1-et inicializáltam. Két interrupt-om van, egyik, amikor OCR1A-val megegyezik a TCNT1-gyel, a másik pedig amikor túlcsordul a TCNT1. A gond, hogy le lesz nullázva a számláló, ha az OCR1A interrupt lefut. Most úgy oldottam meg, hogy az OCR1A interruptjában adtam eggyel nagyobb értéket a TCNT1-nek, mint ami előtte volt, így tovább számolt a timer. Így működőképes. A kérdésem, hogy ezt így szokták csinálni? Szoftveres pwm-et állítok elő. Köszönöm!
Az ltcInit()-et meghívod valahol?
A set-SS bitet ne használd, mert szétkapcsol a 2 Byte között.
Igen, meghívom, csak az nálam korábban is spi_init() volt. Most a nullákkal küzdök. Az interruptos megodásban legalább számokat is láttam, de azt az időzítést nehezebb volt tartani.
Így könnyebb lenne, de így meg mindig 0 az eredmény. ![]()
Adatlap 6. oldalon írja, hogy várni kel a konverzióra:
Setup Time CONV- Before First SCK↑ Max 60 ns, Typ 30 ns. Gondolom attól függ menyi bitet használsz? A hozzászólás módosítva: Jan 31, 2015
Lehet, hogy ezt sem jól csinálom. De próbáltam már nagy időt is adni neki. Végül is, jöttek számok, de nem volt benne következetesség. Most azonban csak nullák. Megpróbálom az általad javasolt időzítést. Köszönöm a segítséget!
Vannak már számok is, csak nagyon különbözőek, és egyik értéke sem haladja meg a 8 bitet.
A probléma az volt, hogy elfelejtettem, hogy a CONV láb akkor megy le, ha a PG0 fel. ![]() A 16 bit azonban még mindig várat magára. Szerintetek mi lehet itt a rossz? (A kód nagy része még mindig másolt.)
Betettem. Először 30-at, utána 60-at. Mégis 8 bit az eredmény.
![]()
Pedig már éppen Istennek akartalak szólítani. De ami késik, nem múlik. ![]() A hozzászólás módosítva: Jan 31, 2015
Sajnos, még mindig 8 bit. Pedig a bitműveletet a másiknál is kikapcsoltam.
![]() ![]() A tempRead = tempRead<<8 sincs már benne. Mégis hasonló eredmények jönnek.
Ezen ne csodálkoz!!!
![]() "A tempRead = tempRead<<8 sincs már benne. Mégis hasonló eredmények jönnek." |
Bejelentkezés
Hirdetés |