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 adatlapban sajnos nem találtam róla semmit. Egyébként kipróbáltam és nincs vele semmi gond. Nem is csökkent rajta a feszültség. De biztos ami biztos valami olcsó műveleti erősítőt hozzákötök. ATmega8535 - öt használok egész pontos 2,5V - ot mérek rajta. De ha nem lenne szabad akkor minek vezetik ki a refet
Én teljesen értem amit írsz. Lehet rosszul fogalmazom a kérdésem. Szóval:
PB0 = R_duty; PB1 = G_duty; PB2 = B_duty; Én ezt az értékadást hiányolom. Nem látom a kódban, hogy adott porthoz hol rendeli hozzá az ő változóját. Szerintem a C ismereteim hiánya miatt vagyok gondba.
Követő erősítős kapcsolással menni fog. Amúgy azért van kivezetve, hogy egy kondit tudj rákötni, hogy stabilabb legyen.
Értem és köszi
![]()
Meg ne valami mosfet erősítővel próbálkozz, mert a 2,5 V-ból lesz 3 V
![]()
Szia!
Kifejezetten nincs dedikálva, mert minek ? Az egy ledhez tartozó portlábat csak 2 helyen módosítja, így nincs szükség hozzárendelésre(1, amikor mindhármat egyszerre 1-be állítja, 2, amikor egyesével (külön-külön) 0-ba kapcsolja, amikor az adott SZÍNhez tartozó változó eléri a 0-t. Az R_G_B_duty -t nem lehet porthoz rendelni,mert az VÁLTOZÓ !!! ennek függvényében van kapcsolva az adott ledhez tartozó kimeneti port. Üdv Kiborg
Ezek szerint itt dől el, hogy mikor milyen szinten legyenek a portok? Bocs, hogy ennyit értetlenkedek, de még mindig nem volágos mert a LED színe akkor is függ a kitöltéstől. És ezeket az összefüggéseket keresem. :hide:
Amit írtál részben dől el, hogy MEDDIG lesz aktív a kimenet.
Itt kapcsolja, ki, ha adott számláló elérte a 0-t. A megszakítás részében, meg bekapcsolja egyszerre mindet.
Nem tudnátok ajánlani egy jó könyvet vagy leírást a C alapokról AVR-hez? Belátom, hogy a C tudásom sem elég ide.
Köszönöm! Átnézem őket.
Bár így gyorsan beleolvasa ezeket tudom. Nem tudom a következő sor mennyire AVR spec:
A PORTB és PINB3 nyilván az csak nem értem miért így ad neki értéket.
Ennyire már én sem vagyok C guru.
![]() ![]()
Foleg azert vezetik ki, hogy szurokondit tudjal kotni ra, illetve ha kulso referenciat valasztasz, akkor ide kell kotnod a kulso forrast.
Csak a PORTB es a PINB3 AVR specifikus(, de akar barmi mas is lehetne).
A PORTB a B port kimenete, egy 8 bites regiszterre mutat, de szamodra olyan, mintha egy valtozo lenne. A PINB3 a B port 3. labara(0-tol indul a szamozas) utal, de valojaban ez egy konstans aminek az erteke 3. Igy az utasitst ertelmezve
Nem lett volna egyszerűbb alak:
PORTB = 0b00000100; Szerk.: Talán nem mert így lekapcsolom az összes többi lábat amit néha nem kéne?
Bit maskolásnak hívják. Ez a módja annak, hogy egy bit változzon meg, anélkül, hogy tudnánk a fordítási időben, hogy majd a futási időben mi is lesz a pontos értéke a PORTB -nek.
Ok. Értem, de ebben az esetben miért van rá szükség?
Nem egy fix feltétel esetén kapcsolja fel vagy le a B port 3-as lábát? Itt elvileg fordításkor is tudom mi az érték.?
A feltétel az fix. De mit javasolsz akkor, hogyan töröljük a 3. bitet a PORTB -ben?
PORTB = 0b00001000;
Ez miért nem jó?
Nekem nem igazán tetszik ez a maszkolásos dolog, ezért a múltkor keresgélve ezeket találtam:
Ezek után így néz ki a dolog: CLEARBIT(PORTB,3); Tökre ugyanazt csinálja, de legalább a gyakorlatlan szem is látja mi történik.
Szia!
Akkor ez lényegében ugyanaz, mint amsben a következő kódrészlet:
Avagy sem? ![]() ami természetesen egyenértékű:
Azért nem, mert ebben esetben ha pl a 0.bit 1 volt, akkor azt is törlöd, pedig nem is akarod...
Ez nagyon jó. Szerintem alkalmazni fogom, de előbb szeretném megérteni ezt a maszkolást. Sehol nem találok kezdő számára érthető magyarázatot.
Szia!
Gondold át, az előző hozzászólásom. Ott pont a maszkolást mutatom be. Egyszerűen. Beolvasok egy regiszterbe(változóba) egy értéket. A vagy(ori) utasítással be tudok kapcsolni egyes nekem tetsző biteket. Az és (andi) utasítással pedig kikapcsolom azt a bitet, ahol 0 van, a többit ahol 1 van, változatlanul hagyom. Majd végül kiírom a regiszter értékét a kimenetre. Ez csak egyszerű boole algebra. A digitális technika alapja.
Ok. Így már értem.
A lényege, hogy ne változtassam mind a 8 bit állapotát, hanem csak azt az egyet amelyiket én akarom hiszen ebben az esetben:
az összes bit változna viszont én nem biztos, hogy tudom mind a 8 értéket az meg fölösleges, hogy előbb lekérem őket. Remélem jól gondolom.
Már nem tudtam módosítani a HSZ-t.
Viszont ez nem ugyan az?
Végül is itt is csak a PORTB 3. lábának adok 1 értéket.
A C-hez újfent nem tudok hozzászólni.
Viszont PORTB =0b00001000 nem feltétlenül jelenti hogy minden bit változni hogy a kimeneten !!! Amik 0-k voltak, azok nem változnak.(de gondolom ez triviális). Akkor felesleges lekérni az értéket, ha tudod, de ha nem tudod, akkor le kell kérni, hogy maszkolással tudd módosítani. Hiszen ha nem tudod mit módosítasz annak nincs értelme...
Sziasztok.
A segítségeteket szeretném kérni mivel csinálok egy vonalkövetö robotott egy Atmega8-al de a PWM vezérlés nem akar összejönni. Az OCR1B azaz PB2-es lábon nem akar létrejönni a jel. A PB1-es tökéletesen müködik.Nem hinném hogy az Atmegával lenne a baj mivel több darabon is kipróbáltam és az eredmény ugyan az. A kódott feltöltöttem. Elöre is köszi.
Találtam egy HTML-es szimulátort 2x16 -os alfanumeratikus kijelzőre, és gondoltam megvalósítom egy attiny2313-al. csak 4-bites adatátvitelt és kétsoros kijelzést akartam beállítani , úgy hogy a lábakat állítom L vagy H szintre ,de nem jött be. Nézegettem hogy más hexadecimális számokkal vezérli. Tud valaki abban segíteni hogy hol találok valami leírást hogy ezt hogyan kell megvalósítani?
|
Bejelentkezés
Hirdetés |