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
Szia, köszi, én is így kerestem.
Ahol spéci IC szerepel, azt azonnal ki kell zárnom, ezen kívül csak ezt a megoldást találtam: Bővebben: Link. Ha ebből kettőt építek, lassú sebesség mellett működhet? Nekem nem kell nagy sebesség, csak a két irányú kommunikáció.
100ms lesz az...
Kezdetnek jó lesz a szűrő... Freki az olyan legyen, hogy minél kevesebb zajt termeljen... Ezt így nehéz lenne megmondani.
Az AVCC-t mindenkeppen kosd tapra. Akkor is, ha nem hasznalod az A/D-t.
A hoelemhez hozzatartozik, hogy, amikor eloszor kerdeztel a MAX chip-rol, es feltettel egy kepet a mert adatoktol, mar ott is 8-10 fokos ugralas volt. Ezen erdemes elgondolkodni. De, ahogy vzoole mondja, valoszinuleg a paka kapcsolgatasa okozza a zaj nagy reszet. Ilyen esetekben elofordul, hogy szinkronizaljak a PWM-et a mereshez. Mivel ez egy lassu valami, itt a PWM jelet akar sw-bol is elo lehet allitani, nem hiszem, hogy 10Hz-nel gyorsabb kellene. A merest meg mindig a futotest bekapcsolasa elott kell vegezni. De ez csak egy otlet, lehet, hogy rendes szuressel, es sw atlagolassal megoldhato a problema.
A fórumból elvesztek hozzászólások, reggel mög egy lappal több volt de sebaj.
Szóval szeretném nektek a sok segítö választ megköszönni. Szimpatikus az AVR USBasp, de mivel itt Münchenben nem nagyon tudnák felprogramozni, egy ilyenre gondoltam megvenni. Pedig az építés és a felélesztés élmményét meghagyhatták volna nekem. Sme soros portom, sem LTP-m nincs a laptopomon már így csakis USB-s jöhet szóba.
Sziasztok
Picit elakadtam, adott egy mozgásérzékelő, ami ha érzékel, az atmegán keresztül növeli egy digitális hangerőszabályzó kimeneti jelét. Ha viszont nem, akkor lecsökken a hangerő egy adott mértékig. A problémám az, hogy ez az egész egy while ciklusban van és így ha érzékel is a mozgásérzékelő(csak mozgást érzékel jelenlétet nem) mindenképpen le fog csökkenni a hangerő a minimális szintre. (mert nem ugrabugrálok előtte folyamatosan) Azt szeretném megoldani hogy mielőtt elkezdené csökkenteni az értéket várjon mondjuk 1 percet és csak azután induljon el. És csökkentés közben ha érkezik újabb jel a mozgásérzékelőből akkor növelje a hangerőt(vissza) és megint csak 1 perc múlva kezdje ezt. Mivel lehet ezt megoldani?
Köszönöm mindkettőtöknek a választ. Akkor megcsinálom amit tanácsoltatok és ha gond van jelentkezem.
Szia, szerintem csak be kell vezetned egy új változót aminek az értékét egy mozgás érzékelése után beállítod, majd folyamatosan csökken minden ciklusban mikor nem volt mozgás, ha lemegy 0-ig (nem volt mozgás már egy idelye) akkor elkezdesz halkítani, ha menetközben volt mozgás úra max-ra állítod az értékét.
Köszi szépen jó ötlet! Működik!
Még egy utolsó felvetés a programozóval kapcsolatban: láttam videót, hogy Aurdino is tud programozni. Lehet avval jobban járok mint egy kis USB-sel, ha már mindenképp vennem kell és nem építhetek.
Azt tudod, hogy a hozzászólásaidat a modik áthelyezték ide?
Egy ATMega128-al hogyan mérnétek két external interrupt között eltelt időt?
Az ICPx lábak sajnos foglaltak, így nem tudom használni az Input Capture módot. Az egyik lábon, amire be van állítva az external interrupt, keletkezik egy felfutó él, majd megint egy felfutó él. A kettő között legalább 3-4 ms eltelik, de van amikor hosszabb. Ez lehet 500ms is, de ez nincs még leszögezve, de az 1:10 átfogást tudni kellene. A pontosságon még gondolkozom, ha már tudom mérni, akkor könnyebb lesz eldönteni, hogy milyen pontosan. A feladat egy optikai kapu által érzékelt két lyuk közti idő lemérése. Nekem megoldásként az jutott eszembe, hogy simán elindítok egy időzítőt, majd megállítom a következő eseménynél. Eztán kiolvas, töröl, újraindít...
Vagy azt csinalod sw-bol, amit az input capture. Mindket interruptnal letarolod egy folyamatosan szamolo szamlalo erteket, es egyszeruen kivonod a kettot egymasbol. Csak arra kell figyelni, hogy a szamlalo teljes korbefordulasa legalabb a duplaja legyen a leghosszabb merendo idokoznek. Tehat, ha 500ms a max, amit merni kell, akkor a szamallao legalabb 1 masodperc alatt jarjon korbe. 16 biten ez ~15us felbontas.
Szia.
Két AVR közti leválasztott kommunikációra láttam egy megoldást, ahol a TX és RX lábak vannak optocsatolóval leválasztva. Ezt ki fogom próbálni, szimpatikusnak tűnik a megoldás. Nem is tudom, miért akartam kétirányú SDA lábat leválasztani, mikor ott van a soros port.
Sziasztok!
Megépítettem ezt az időzítőt Atmega8-al. Csak van egy gond vele orosz vagy valami kínai a menűje, elég nehéz rajta eligazodni nem lehetne valahogy valami angol vagy magyarra átírni? Sajnos ehhez én nem értek. ![]() Ha valaki tudna segíteni azt nagyon megköszönném!! Ennyi infóm van róla ez alapján építettem meg.
Ha nincsen forráskód az adott projecthez?
Akkor nem tudsz mit tenni! Keres másik hasonló projektet, forráskóddal. Biztos találsz tucatjával.
Sziasztok
Egy potméterrel szeretném állítani egy változó értékét. Meg lehet ezt oldani valahogy? Van egy komplett program, nálam egy adat nevű változó amivel beállítok egy hangerősséget. De több helyen is felülírom egy while cikluson belül. Meg tudom e azt oldani, hogy pl létrehozok egy adat max változót és akkor a program nem tudja túllépni az adat max-ban definiált értéket?
Igen!
![]()
Rákötöd a poti kimenetét valamelyik ADC bemenetre
![]()
Szia. A loop-ba raksz egy feltételt, hogy ha válozó>max, akkor változó=max; , vagy ezt berakod minden helyre, ahol változtatás jön létre, ha esetleg hosszabb ideig tartózkodnál egy while-on belül.
Egyik ADC bemenetre raksz egy potit, annak beolvasod az értékét, ekkor kapsz 0-1024 értéket. Nem tudom, hogy neked ez a változód minimum és maximum értéke mi, de biztos nem ez a határ, erre lehet használni a map( ) függvényt, ez arányosan átalakítja a változó értékét. Ha programból ÉS potiról is változtatni akarod a változót, akkor azt megteheted, hogy csak akkor írja felül a változót a poti értékével a program, ha megmozdul a poti. Ezt egyszerűen ellenőrizheted: ha (előzőpotiérték!=mostpotiérték), akkor változó=mostpotiérték. Ebben az esetben csak poti forgatáskor változik a változó, viszont ugrás szerűen! Ha előtte nulla volt, a poti viszont majdnem maximumon van, és megmozdítod, akkor egyből a változó értéke is nagy lesz. Ezt is ki lehet persze korrigálni...
Sziasztok!
Egy röpke megerősítést vagy fejrázást kérek a "szakiktól". ![]() Igaz-e, hogy Tiny861 uP, PWM6 üzemmódban a negált kimenetek mindenképpen a hullámforma inverzei lesznek? Pontosítva, kicsit bővebben: Ha megnézem a z Atmel doksi 12-8 "Dead Time Generator" rajzát, akkor úgy tűnik, hogy OCWnx hullámhoz képest OCnx inverz mindig inverze lesz. Ha viszont megnézem a 12-14 ábrát ("PWM6 Mode, Single-slope Operation, Timing Diagram", akkor úgy tűnik, hogy az inverz kimenet is OCW1A hullámmal azonos helyzetű. Üdv!
Sziasztok!
Van egy termék nálam, aminek a vezérlő IC-je egy ATXMEGA32D4. Ennek az egyik lába tönkrement. Milyen programozóval lehet ebből az IC-ből kinyerni a forráskódot, hogy ha a helyébe egy másikat forrasztok, akkor utána azt fel tudjam programozni vele? Ha esetleg van védelem, attól még a teljes területet ki lehet vele olvasni és azt átemelni egy ugyan olyan vezérlőbe? Nincs valakinek véletlen egy napra kölcsön egy ilyen programozója? Hálás lennék érte! ![]()
Hol a hiba miért nem szól?
Ha csak szimplán nyomógombról változtatom adatki értékét(hangerőt) akkor tökéletesen működik. Valahol elbénázom a ADC beállítást? AREF és AVCC 5V ra vannak kötve AGND földön. AREF egy 100nF-os kondival földre kötve. Poti így van bekötve ADC0-ra POTI
Most komolyan, szerinted hányan szedik le a zipedet, hogy segítsenek megtalálni a hibát a kódodban? Szívesen ránéznék, de bocs én nem fogok zipelgetni.
Bocsi máris átjavítom.
Közben minden beavatkozás nélkül egyik beírás során megszólalt és azóta működik. Szóval valami gond volt amit nem értek.
Általában le szokták tiltani, hogy kész termékből a kódot kiolvasd.
Egy kis érdekesség.
Szia!
Atmega16 után a 16 az órajelre utal(és e miatt szükséges nagyobb tápfeszültségre!!!) a pu meg a tokozásra. Egyébként ilyen kérdésekre általában az adatlapban (is) megtalálod a választ. ctrl+f ott is működik. (nem rosszindulatból mondom, de időt spórolhatsz magadnak. ![]() |
Bejelentkezés
Hirdetés |