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
hali
LCD-re szeretnék ékezetes karaktereket kiírni és az lenne a kérdés hogy van valami program ami lefordítja a bináris számokat hexadecimálisra? Vagy van külön táblázat? mert neten nemtaláltam. 44780 kompatibilis kijelző.
Egy kis kitérő: van egy lézernyomtató típus, Konica Minolta C1600 ez a toner "csippje" hogyan kommunikál a nyomtató ezzel a csippel, amiről képet is illesztek be? A 1-wire hoz sok az érintkezők száma, az I2Chez meg kevés.
Tudod hogy egyáltalán mit beszélsz? Olyan IC-t még sose láttam aminek "valamennyi+fél lába" van...
1: Az 1-wire 1, az I2C 2 lábat használ(+cím ha van).
2: Az Atmel sehol nem használ 1-wire-t
3: A lábszám nem támpont, 8 lábú IC akár SPI-n is kommunikál ami 4 lábat is lefoglalhat...
Ez a tablazat is hasznos lehet, ASCII tablazat is meg hex konverter is, igaz csak 127-ig. Pl 'A' betu: Oszlopban 4, sorban 1, azaz hex 41. Oszlopban latod, hogy '100', sorban, hogy '0001', tehat binarisan 0100 0001...
Bocsi, lehet hogy nem voltam világos ,de nem az ICről beszéltem,amikor azt mondtam, hogy I2Chez kevés, '-wire hoz sok, hanem ennek a kis nyáknak a másik oldalára, ugyanis ha megnézed a képek, ott láthatod. hogy három érintkező sáv van. A 1-wire hoz kettő érintkező kellene, (pl a HP P1105 "tonercsipp" 1-wire) az I2c-hez meg 4 kivezetés (pl Canon IP4600 ) .de ezen a kis panelol (ezt értem tonercsipp alatt) 3 érintkező-sáv van.
Atmega 128-as processzor programozásánál a fuse biteket ami a külső kristályról működést biztosítja, rosszul állítottam be. Így most nem érem el a programozón keresztül (AVRISP MK II). A processzort újra hogyan érhetem el?
Köszi
Először próbálj meg egy minimum 1MHz-es jelet adni az XTAL1 lábra és úgy próbáld meg ISP-vel!
Ha nem megy, de a JTAGEN-t még nem piszkáltad akkor JTAG ICE.
Ha már kikapcsoltad akkor HVPP Fusebit Doctor(vajon támogatja?), végső esetben AVR-Dragon vagy STK500,
ez utóbbiból gyári, illetve HVPP-képes klónok jöhetnek szóba. Sajnos HVPP esetében 20 vezetéket kell bekötnöd, míg ISP és JTAG esetében maximum 6-ot kell...
Bocsánat, már egy kicsit késő volt, álmosan néztem meg. Most mást fogok mondani: De hisz ez egy ATTiny45!
Tehát nem EEPROM, hanem mikrokontroller. Be van égetve egy program, és azzal kommunikál.
Valószínűleg ez számlálja a lapokat(saját EEPROM-ban le is tárolja) és a eredetiségét is biztosíthatja.
Ha utántöltöd a tonert, vagy utángyártottra cseréled, akkor egy bizonyos lapszám fölött nem engedi.
Szerintem a protokoll egyedi és csak 1 vezetéket használ. Aszinkron átvitel oda és vissza.
De lehet hogy csak vissza(elküldi a lapszámot), és minden bekapcsoláskor 1-el növeli.
A kristály is aszinkron átvitelt sejtet, ahhoz pontos időzítés kell hidegben-melegben!
De van még egy lehetőség I2C-re is mert a csavarhelyek is galvánozottak, az is érintkezhet...
Én a helyedben megnézném hogy a táplábak melyik 2 kimenetre mennek, a harmadikat pedig rákötném
egy MAX-232 Rx bemenetére(esetleg USB-re MCP2200 vagy FT232 közvetítésével). Egy terminálban(pl. TeraTerm) pedig nézném hogy miket bekapcsoláskor küld, persze a baud rate meg egyebekkel jáccani kell. Ha már érthető a logika, lehet hogy egy "körbeszámoltatással" lehet frissíteni.
Lehet hogy csak az én kezdő butaságom volt, rájöttem, hogy nem a programba kell írni az oszcillátor frekvenciáját, hanem az égető résznél kell beállítani, ezzel szívtam egy hetet, mert nem azon a frekvencián pörgött az atmega8, mint én akartam, ma este jöttem erre rá örömünnep közepette...
Tehát másoknak is mondom, akinek esetleg hasonló gondja lenne, mellékeltem egy képet, az avr studio 4 nél agy kell frekvenciát állítani!
Mi ezt úgy csináltuk, hogy különböző osztók között kapcsolgatunk éppen a mérésnek megfelelően. Az AD ref fesze pedig minden esetben állandó vagy az osztók úgy vannak kiszámolva, hogy az általunk kitalált max bemeneti feszültség az osztó után pont az AD-re köthető legnagyobb feszültséggel egyezzen meg. Ezután tudjuk az AD felbontást, és hogy mekkora a legnagyobb feszültség, amiből ki lehet számolni, hogy az AD által adott érték valójában mekkora feszültségnek felel meg.
Maga a beszabályozás úgy szokott történni (ha jól tudom), hogy a műszerre rákötnek egy jó pár nagyobb pontossági osztályú etalont, majd összehasonlítják az elvárt és a mért értéket. (ez eddig kalibrálás) Majd analóg módon (trimmer ellenállás stb..), vagy digitális módon (korrigálási érték megadásával/módosításával) addig addig állítgatják amíg az elvárt bizonytalansági tartományon belül van.
Ezt otthon úgy tudod megcsinálni, hogy veszel egy feszültség referenciát (meglepően olcsó), és egy kis bemeneti offestű műveleti erősítőt (azaz csak bipoláris jöhet szóba, ami már kicsit drágább) és egy követő erősítőt csinálsz belőle. Rákötöd az áramkörödre és megnézed hogy mekkora az eltérés, és korrigálhatod az AVR-en belül.
Am ma már kb mindenki lesz.rja hogy kalibrálás helyett beszabályozást mondjon. Sajnos .
Szerintem azért, mert szinte minden AVR-t támogat. Microchipnél is az ICD2 meg az ICD3 borzasztó sokba kerül. Sőt ott még normális csatlakozó felületed sincs, mert a telefon zsinór semmire sem jó, és minden méreg drága hozzá. PIC-hez szerintem a PICkit3 a legjobb választás, szinte minden 8, 16 bitest tud, és még néhány 32 bitest is.
AT90CAN128-ban szeretnék bootloadert írni.
bootsz0, bootsz1, bootrst: programmed.
A 0xF000 címről bootol.
Az MCUCR regiszterben az IVSEL bit is 1.
Ha kiolvasom akkor is. JTAG nincs, de ha a bit 1 akkor világít a led
De ha valami megszakítás érkezik (USART0 RX) akkor valamiért a 0x0000 címnél lévő megszakításvektort hívja meg szerintem, mert mindig újrabootol a ketyere. És mivel a UCSR0A RXC0 bit 1 így megint megszakítást érez és végtelen bootloopba kerül. Mi lehet a gáz, hogy nem a bootloader részben lévő megszakításvektorokat használja?
Sziasztok!
Lehet bugyuta lesz a kérdésem, de csak nemrég kezdtem el foglalkozni az elektronikával, az avr-ekkel meg tegnapelőtt
Szóval: Atmega8 pwm lábáról meghajtható közvetlenül egy normál 16x2 kijelző háttérvilágítása? (természetesen előtéttel, bár ha jól látom bele van építve egy 33 Ωos alapból) Az adatlap szerint 40mA kell neki.
Vagy kell hozzá tranzisztor? Bár nem túl elegáns, de ha elbírná akkor kihagynám.
Egy LCD háttérvilágítása általában nagyobb áramot vesz fel, a mostanság olcsó és divatos kékek
amin fehérek a betűk, az például 40-50mA-t, amihez egy 68Ohm ellenállás kell 5V-os fesz mellett.
Szerintem elég egyszerű: kell egy NPN tranzisztor open-collector módban, a bázisára meg mehet a PWM!