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
Szerintem is az a probléma amit sikolymester is írt.
Ha AVR studio 4-et telepítettél abban csak assembly fordító van. A C fordító a WinAVR, azt is fel kell telepítened. Ez szépen beépül az AVR studioba.
Kedves Topi!
Köszi a megjegyzést, megpróbálom rendesen beilleszteni. Kedves sikolymester! Van fent WinAVR Kedves benjami! Ezek szerint ezért nem sikerül lefordítani. Mindenkinek köszönöm a segítséget!
Nos végül sikerül működésre bírnom az előző hozzászólásomban mellékelt LDC lib-et.
Tetszik is, de elég alap. Próbáltam ezt: Bővebben: Link Ez már egész jó lenne, de ennek hatására az LCD kijelző semmit sem csinál Tud valaki egy jól használható lib-et?
Peter Fleury libjei szerintem pöpecek.
Sziasztok!
A következő dologba futottam bele: Attiny 45 sleep módból, tápfesz. ráadása után nem úgy működik mint gondolnám, viszont reset után tökéletesen megy. Röviden: Attiny45 PB0 váltása esetén sleep módból felébred, pwm-el meghajt egy leded, vár, led kialszik szintén pwm-el, majd újból sleep mód. HW.: PB0 nyomógomb, PB1 LED pwm, PB2 debug led. Mi okozza ezt, ill mit rontok el?
Kicsit pontosítsd a jelenséget légyszi.
1: Tehát ez az áramkör folyamatosan kap tápfeszültséget, megteszi amit kell, majd POWER DOWN módba megy. Ezután megnyomod az interrupt gombot, ami után nem helyesen kapcsol be? 2: A kapcsolás működik, elmegy POWER DOWN módba, majd le veszed róla a tápfeszt. Amikor megint kap tápfeszt, akkor nem helyesen kapcsol be? Emiatt vagyok bizonytalan: Idézet: „...tápfesz. ráadása után...”
Szia!
Tápfesz ráadásakor végig fut, a debug led világít.Most ha megnyomom a gombot a debug led átvált, viszont pwm nincs.Ha nyomok egy resetet onnantól működik a pwm is. Remélem érthető, köszi !
Önmagában érdekes a sztochasztikus viselkedés, de azért nézd meg megint a sleep.h leírását.
Ezt a példát nézd meg:
Szerintem az a baj, hogy az ISR-ben flag++ van, mig a foprogram vegtelen hurkan beluli if-ben flag==1 -re ellenorzol. Ha egymasra fut a prellezes miatt ket interrupt, akkor mar a flag erteke 2 lesz, mire eljutna az ellenorzeshez.
Azt kene csinalni, hogy ha a gombot lenyomtak, akkor azt a megszakitast letiltod, es a fohurokban engedelyezed ujra, az if vegen. Termeszetesen az engedelyezes elott kell kozvetlen torolni a megszakitashoz tartozo flagbit-et is.
Idézet: „Peter Fleury libjei szerintem pöpecek.” Oké-Oké... De ezzel nekem meg sem szólal az LCD-m. Beállítom a megfelelő portokat, de semmi.
Ugyanazon az oldalon van egy török srác linkje, az teljesen érthetö és nagyon részletesen elmagyarázza az LCD müködését sok példával. Szerintem annak mennie kell.
Milyen AVR-t használsz?
ATMEGA168.
A HW konfiguráció ua. csak a libeket cserélgetem. Amit korábban linkeltem azzal jó minden más eddig nem ment. LCD: Bővebben: Link
Sziasztok!
Két elméleti kérdés: Ha három porton bekapcsolom a felhúzó ellenállásokat akkor a következő kód közül melyik optimálisabb:
Vagy:
A Másik kérdés:
Ezt nem tudtam elegánsabbá tenni. Ha & helyett != írok és elhagyon a feltétel előtti negálást akkor nem jó. Tudom ez inkább alap C ismeret.
Valaki tud valami okosat mondani ezzel kapcsolatban ?
RFM70 transciever és az utána levő pár hozzászólás. Üdv Kiborg
Sziasztok.
Mi lehet az oka, hogy egy Atmega8 vezérlő teljesen random időközönként (néhány perc) újrainul vagy lefagy. Belső órajellel megy 8 Mhz-en. Tápfeszültség és minden egyéb külső tényező rendben van. Egyszerűen nem értem. Segítő válaszokat köszönöm szépen!
Egészen biztos vagy benne, hogy jó a táprész? De lehet hogy a reset láb a gond. Kapcsolási rajzot mellékelnél?
Második fajta értékadást szokták használni. Disassembly ablakban tudod megnézni .
Idézet: „Ha & helyett != írok és elhagyon a feltétel előtti negálást akkor nem jó.” Persze hogy nem jó, mert a != értékadásnak felel meg, és így ebben a kontextusban akkor lesz igaz a feltétel, ha megtörtént az értékadás. Vagyis mindig igaz lesz. Egyszerűbbet nem tudok, de az ilyeneket lehet macroval helyettesíteni, és így kevesebbet kell írni. Példa:
Köszi a választ.
Az első fele: Program méretben gondolom nem egy óriási különbség. Nem teszteltem. Második. Ha nincs egyszerűbb alak akkor így használom mert a makrókban sem akarok elveszni. Csak valamiért az volt bennem, hogyha működik az & AND ellenőrzés akkor a != is működig ebben az esetben. Akkor marad az & negálása.
Labortápról veszek feszt, után 7805 + puffer. A reset lábon egy mikrokapcsoló van a földre kötve, ha nekem kellene resetelni esetleg. Kapcsolási rajzom már nincs meg : /
Csak egy kapcsoló ? És hol van a felhúzó ellenállás ? Meg a kondenzátor (esetleg) ?
Megnéztem hogy hogyan is fordítja le, mert régóta foglalkoztatott csak soha nem vitt rá a lélek, hogy megnézzem.
Itt akár mennyit is állítasz be, mindig három utasításból fog állni.
Itt pedig annyi utasítás lesz amennyi bitet változtatsz. Összességében ahogy írtad is, nem egy óriási különbség. Adott esetben pár utasítás jelent összesen. Igazából ami neked kellene a bit tesztelésre, az asm-ben ennyi lenne:
Sajnos a C-ben nincs lehetőség ilyen egyszerű megoldásra. De macrokkal lehet egyszerűsíteni olvasás szempontjából.
Felhúzó ellenállás az tényleg nincs. Elképzelhető akkor, hogy a PC6 lábon úgymond nem elég stabil az 5V, és néha ezért keletkezik reset ?
Hozzáadtam egy 10k ellenállást, most egyenlőre megszűnni látszik a "hiba." Véleményed ?
Köszi, hogy megnézted.
Ennek szerintem csak akkor lesz érdemi jelentőssége, ha már nem igen fér el a kód az MCU-ban. Akkor lehet molyolni, hogy kissebb legyen. Én maradok a C-nél. Ezt úgy ahogy már megismertem ASM-hez "öreg" vagyok, hogy megtanuljam
Már nem emlékszem milyen a processzorod, de az ujabbak egyik tipusa (talán az A) átment egy innovácion és a belsö 10 kOhmos felhuzo ellenállók 100kOhmra lettek cserélve, amik adott esetben nem adnak megfelelö stabilitást. Igy mindenképpen külsö ellenállók kellenek.
Sziasztok!
Előre bocsájtom, hogy nincs nagy gyakorlatom a kódolásban. Különösen vonatkozik ez a C-re. Régebben a PIC-el foglalkoztam az MPLab-al. Az AVR-el most ismerkedek. Sikerült azt a kódot lefordítani amit fentebb beillesztettem. Szeretnék továbblépni, a Topi által alkotott csengőt szeretném úgy megoldani, hogy csak egy dallam szóljon. Ha sikerül, akkor megpróbálok egy olyan dallamot csinálni, amire szükségem van. Letöltöttem a firmware.zip-et. Az nem tiszta, hogy a main.c-t betöltve a winAVR-be, nem fordítja le, hiába próbálom a Makefile-t átállítani, hibát ír ki. Megpróbáltam AVRStudioban is de ott sem megy. A kód és a leírás itt található: Bővebben: Link Ez itt szerintem a vezérlő kód.
Ez nem tartalmazza a dallamok kódját, ezért még a melodies.c-t is hozzáfűztem, de sikertelen a forditás. Arra szeretnélek megkérni benneteket, hogy írjátok meg, hogy melyik file-t próbáljam berakni a fordítóba? Segítségeteket előre is köszönöm!
Máskor a [ Kód ] gombot használd légyszíves a kód beszúráshoz. Köszi!
Szia Topi!
Most a kód beillesztést használtam. Mit rontottam el? |
Bejelentkezés
Hirdetés |