Fórum témák

» Több friss téma
Fórum » AVR - Miértek hogyanok
 
Témaindító: pakibec, idő: Márc 11, 2006
Témakörök:
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
Lapozás: OK   454 / 840
(#) karika200 válasza TavIR-AVR hozzászólására (») Júl 3, 2012 /
 
Ez remekül hangzik. Köszönöm a segítségeteket! Utána olvasok akkor ennek az iránynak rendesen és nekiülök.. Köszi!
(#) Robi98 hozzászólása Júl 3, 2012 /
 
Sziasztok!
Multkor vettem egy AVR STK 500-as programozót.
Működött is rendesen, de most valamiért nem ismeri fel a gép. Lehet hogy a gépem rossz mert már ráférne egy újratelepítés, de akkor sem értem hogy miért nem jön a hardvervarázsló. Amikor összekötöm a géppel , az ad 3-szor egy gyors hangot és annyi.
Tehát még a drivereket sem tudom feltelepíteni.
Mi lehet a hiba?
(#) TavIR-AVR válasza Robi98 hozzászólására (») Júl 3, 2012 /
 
Programozó _pontos_ típusa?
A gyári soros porti . Az nem csipog...

Ha FTDI driveres: FTClean-nal pucold le a drivert. Ha másféle, akkor pl. a USBDeView programmal...
(#) zombee válasza Robi98 hozzászólására (») Júl 3, 2012 /
 
USB eszköznél a 3 pittyegés arra utal hogy:
1: driver hiba, pl. le lett tiltva, megsérült, stb.
2: nem ismerhető fel a cucc - elromlott

Hogy megtudd mi a baj, az eszközkezelőt(start->futtatás->devmgmt.msc) kell elindítani.
A kihúzás/bedugás alkalmával frissül a lista, azt kell megnézni hogy ami eltűnik/megjelenik arra mit ír ki.
Ha FTDI, AVR-Doper, MCP2200, "Virtual Serial Port" vagy más értelmes szöveg akkor driverrel van gond.
Ha "ismeretlen eszköz" akkor az USB résszel van gond, pl. megtörhetett a kábel, vagy a vezérlő IC hibás.
(#) Csépe Zoltán válasza Fizikus hozzászólására (») Júl 3, 2012 /
 
Még mindig nem sikerült megoldani megszakítással a led ki és bekapcsolását. Az igazság az hogy a kapcsolásban sem vagyok biztos hogy jó amit csináltam. A egy AtTiny45-ön a PB4es lábra egy ledet tettem a PB2-esre/INT0 miatt/ egy nyomógombot melynek a másik lábát GND-re kötöttem. Ehhez az alábbi kódot írtam:


  1. #define F_CPU 8000000UL  // 8 MHz CPU clock
  2.  
  3. #include <util/delay.h>        // Idozito, keslelteto rutinokat tartalmazo fajl
  4. #include <avr/io.h>            // AVR konstansokat, baallitasokat tart. fajl
  5. #include <avr/interrupt.h>        // Megszakításokat kezelo rutinokat tart. fajl
  6.  
  7.  
  8. int main (void)    // Program eleje
  9. {
  10. DDRB = (1<<PB4);
  11.            PCMSK |= (1<<PB2);
  12.    MCUCR = (0<<ISC01) | (1<<ISC00);
  13.    GIMSK  |= (1<<INT0);
  14.             while (1)
  15.                {    
  16.    // Ide jon a foprogram
  17.                }
  18. }
  19.  
  20. ISR (INT0_vect)    // INT0 megszakitas kiszolgalo rutin utasitasai
  21. {
  22.            PORTB ^= (1<<PB4);    
  23. }


Tudnátok segíteni mit rontottam el. Köszi!
(#) Ricsi89 válasza zombee hozzászólására (») Júl 3, 2012 /
 
100 Ohm-al is ugrál. Szerintem a szenzor lesz a ludas, ha testre kötöttem a bemenetet akkor is ugrált, csak pozitívra kötésnél állt be nullára. Megpróbálok keresni rendes digitális kimenetű hall IC-t, mert ez csak egy nyitott-kollektoros IC.
(#) dc001 válasza Csépe Zoltán hozzászólására (») Júl 3, 2012 /
 
A PCMSK a PCINT-es megaszakítást engedélyezi így ha nincs a programodban benne a megszakítás kezelő, akkor "lefagyhat" az avr:
  1. ISR (PCINT0_vect)
  2. {
  3. }

vagy nem kell a PCMSK regiszter beállítani.

A másik ami gondot okozhat, ha nincs felhúzó ellenállás a nyomogombon, akkor a belső ellenálást kellene bekapcsolni:
  1. PORTB |= (1<<PB2);
(#) Ricsi89 válasza Csépe Zoltán hozzászólására (») Júl 3, 2012 /
 
Main-ban a while előtt engedélyezni kell a megszakításokat a sei(); paranccsal.
(#) zombee válasza Csépe Zoltán hozzászólására (») Júl 3, 2012 /
 
Hello! A kapcsolás milyen? Egy nyomógomb? Kapcsoló?

  1. MCUCR = (0<<ISC01) | (1<<ISC00)

Ez alapján inkább kapcsoló, mert "Any logical change on INT0 generates an interrupt request."
Neked inkább ez kell, ami lefutó élre hívja meg az interruptot:
  1. MCUCR = (1<<ISC01) | (0<<ISC00)


Na ez nem tudom hogy mire kell, de ha a GIMSK-ban a PCIE nincs engedélyezve akkor hatástalan:
  1. PCMSK |= (1<<PB2);

Tehát ettől nem fog lefagyni az AVR ha nincs lekezelve, de nem is fog semmi se történni!

Te az INT0-t akarod használni, ez eddig OK. Ezeket pedig kihagytad az inicializálásnál:
  1. PORTB |= 1<<PB2;
  2. sei();


Kompletten:
  1. #define F_CPU 8000000UL  // 8 MHz CPU clock
  2. #include <util/delay.h>        // Idozito, keslelteto rutinokat tartalmazo fajl
  3. #include <avr/io.h>            // AVR konstansokat, baallitasokat tart. fajl
  4. #include <avr/interrupt.h>        // Megszakításokat kezelo rutinokat tart. fajl
  5.  
  6. int main (void)    // Program eleje
  7. {
  8. DDRB  = (1<<PB4);
  9. PORTB |= 1<<PB2;  //felhúzó ellenállás az INT0-ra
  10. MCUCR = (1<<ISC01) | (0<<ISC00);
  11. GIMSK  |= (1<<INT0);
  12. sei();
  13.             while (1)
  14.                {    
  15.    // Ide jon a foprogram
  16.                }
  17.  
  18. }
  19.  
  20. ISR (INT0_vect)    // INT0 megszakitas kiszolgalo rutin utasitasai
  21. {
  22.            PORTB ^= (1<<PB4);    
  23. }
(#) Robi98 válasza zombee hozzászólására (») Júl 4, 2012 /
 
Megnéztem hogy mi a hiba. Amikor bedugtam a kábelt jött a COM3 portnál a felkiáltójel és azt írta hogy 0. hely AVR Doper. Tehát akkor csak driver hiba.
Most honnan tölthetek le drivert?
(#) zombee válasza Robi98 hozzászólására (») Júl 4, 2012 /
 
A programozó használati útmutatója és drivere innen tölthető le: Bővebben: Link

Win7 alatt vagy az aláírásellenőrzést kell kikapcsolni,
vagy az alábbi kiegészítést kell elolvasni és végigcsinálni: Bővebben: Link
(#) Robi98 válasza zombee hozzászólására (») Júl 4, 2012 /
 
Köszönöm a drivert!
Most már felismeri a programozót a gépem!
(#) Csépe Zoltán válasza zombee hozzászólására (») Júl 4, 2012 /
 
Köszönöm a sok segítséget! Most már működik és elég jól megértettem a kódban a hibáimat, most próbálkozok a pergés mentesítéssel. Viszont olyan kérdésem van, hogy ebből
  1. PORTB |= 1<<PB2;
hogy derűl ki hogy a felhúzó ellenállás be van kapcsolva és hogy néz ki a kód ha nincs?
(#) Csépe Zoltán válasza Csépe Zoltán hozzászólására (») Júl 4, 2012 /
 
Úgy néz ki a pergés mentesítés már működik. De még egy kérdés merült fel bennem. Mi a különbség a két utasítás között: ^= és &= ?
(#) Robi98 hozzászólása Júl 4, 2012 /
 
Sziasztok!
Miért van az hogy az AVR Studioban nem tudom lefordítani a programot ha a build gombra kattintok?
Az üzenetablakban megjelenik a lefordítás dátuma és kész. Valamiért nem megy továb.
(#) dc001 válasza Csépe Zoltán hozzászólására (») Júl 4, 2012 /
 
bitenkénti "ÉS" (AND) operátor (igaz ha mindkét bit igaz):
a &= b; -> a = a & b;

bitenkénti "VAGY" (OR) operátor (igaz ha bármelyik bit igaz):
a |= b; -> a = a | b;

bitenkénti "kizáró VAGY" (XOR) operátor (igaz ha a két bit eltér):
a ^= b; -> a = a ^ b;
(#) trudnai válasza Csépe Zoltán hozzászólására (») Júl 5, 2012 /
 
Idézet:
„hogy derűl ki hogy a felhúzó ellenállás be van kapcsolva és hogy néz ki a kód ha nincs?”


Ez csak beallitja a portot:
  1. PORTB |= 1<<PB2;


Lekerdezni igy lehet:
  1. if ( PINB & ( 1<<PB2 ) ) {
  2.     // PB2 magas
  3. }
  4. else {
  5.     // PB2 alacsony
  6. }


De van aki igy jobban szereti (ugyanazt csinalja):
  1. if ( PINB & _BV(PB2) ) {
  2.     // PB2 magas
  3. }
  4. else {
  5.     // PB2 alacsony
  6. }
(#) zombee válasza Robi98 hozzászólására (») Júl 5, 2012 /
 
Vagy a WinAVR/Toolchain nincs telepítve, vagy az AVR Studio telepítőt kell újra lefuttatni!
(#) kraissadam hozzászólása Júl 6, 2012 /
 
Találtam itthon egy ATmel csippet és van egy avr programozóm csak nem tudom hogy melyik vezeték hova megy ? Mert ami a programozóra van írva az nem egyezik pedig ezzel a programozóval álítólag lehet programozni ezt a chipet!
AT29C010A

http://www.gme.cz/dokumentace/944/944-033/dsh.944-033.1.pdf

A programozómon lábai : MISO ; SCK ; RST ; MOSI ; GND ; VTG

Nem tudom melyiket hova kössem ?
Előre köszönöm a válaszotok
(#) zombee válasza kraissadam hozzászólására (») Júl 6, 2012 /
 
Ez egy flash memória(128KBájt), más funkció, más filozófia, más interfész.
Ha nagyon programozni szeretnéd, 28 vezetéket kell bekötnöd mivel csak párhuzamosan programozható.
Egy 40 lábú AVR ideális megoldás, shift regiszteres megoldásokat kerülném mert iszonyú lassú...
(#) blackdog hozzászólása Júl 7, 2012 /
 
Sziasztok!

Több AVR-t kellene használnom és ezek kell, hogy kommunikáljanak egymással. Alapvetően UART vagy I2C lenne a kegoldás, de ezek az AVR-ek messze vannak egymástól. 10-100-200 méter.
Ekkora távolságon hogyan tudnának biztonságosan kommunikálni egymással? RS485 jó lehet? Hogyan kell ezt megvalósítani? Persze utána olvasok közben, de jó lenne egy kis iránymutatás és ötletek.
(#) ATtiny válasza blackdog hozzászólására (») Júl 7, 2012 /
 
AZ RS485 tökéletes lehet a számodra. Arra azért érdemes figyelni, hogy az RS485 -ös szabvány nem definiálja a protokollt csak az elektromos paramétereket. Javaslom, hogy ne találd fel a spanyol viaszt és egy kipróbált és jól működő protokollt használjál. Pl. BenBus -t Kábelnek felhasználható sima olcsó UTP kábel. Csatlakozóknak meg ugyancsak olcsó és könnyen beszerezhető UTP csatlakozók.
(#) blackdog válasza ATtiny hozzászólására (») Júl 7, 2012 /
 
Szia!

Néztem a BenBus-t és tetszene is, de basic-ben van nekem C kellene.
Egyébként amit készülük megvalósítani:
Lenne 1db Master és max. 4db Slave AVR.
A Slave-nek az lesz a dolga, hogy két ponton hőmérsékletet mér és ezeket elküldi a Mater vezérlőnek 30 másodpercenkét. A Master tárolná az értékeket és az aktuálisat kiírja az LCD-n.
A másik feladata a Slave-nek, hogy lesz 8db digitális bemenet és 12db relé kimenet. Ha bármelyik bemenet magas szintre kerül akkor a Slave megérdezné a Master-t, hogy mit csináljon? Melyik relét vagy reléket huzza be. Ezt a Master egy előre definiált logika alapján mondja meg a Slave egységnek. Lenne még némi logolás is a Slave egységek munkájáról.

Szerintetek ez az elgondolás egyébként megvalósítható?
(#) TavIR-AVR válasza blackdog hozzászólására (») Júl 7, 2012 /
 
Nem jó. A 485-s kezelése 1 master alapúan használható!
Azaz a master kérdezgesse végig a SLAVE-ket, avgy utasítsa őket.

Pl:
M: #1-XXXX
S1: V1YYYYY
M: #2-XXXX
S2: V2ZZZZ

szóval valami ilyesmi protokoll....
(#) blackdog válasza TavIR-AVR hozzászólására (») Júl 7, 2012 /
 
Ezt kifejted bővebben mert nem értem vagy fogalmi zavarban vagyok.
Számomra a Master jelentése:
- Loggolás, adat/állapot megjelenítás LCD-n, Slave kérdésére válasz

Slave jelenése:
- Adatküldés a Master részére, állapot küldés és paracs kérés.
(#) Ricsi89 válasza blackdog hozzászólására (») Júl 7, 2012 /
 
A slave magától nem kezdeményezhet adatküldést, csak parancsra. A parancsot a masternek kell kiadnia, hogy utána válaszoljon rá a slave. Tehát kérdezz-felelek folyik a master és slave eszközök között.
Ez olyan, mint az iskolában a felelés. A tanár kérdez(master), a diák válaszol(slave). De a diáknak hozzá intézett kérdés nélkül csöndben kell ülnie.
(#) blackdog válasza Ricsi89 hozzászólására (») Júl 7, 2012 /
 
Akkor én lényegében kifordítottam a zoknit.
Ezek szerint akkor jó a dolog, ha folyamatosan nézegetem a Slave AVR-ek állapotát vagyis megkérdezem "na most, hogy vagy?" és a kapott válasz alapján válaszolok neki, hogy mit tegyen és a kapott választ logolom.
(#) TavIR-AVR válasza Ricsi89 hozzászólására (») Júl 7, 2012 /
 
Igen. A Slave (szolga) neve hallgass. csak akkor beszélj, ha előtte kérdeztek.

Mert mi van ha 3-4 szolga egszerre beszél? Mondjuk osztályterem .
(#) blackdog hozzászólása Júl 8, 2012 /
 
Tud valaki egy C-ben íródott szabadon használható protokoll-t RS485-re? A BenBus-t nem tudom átírni és ahogyan olvasgatok a témában saját protokol fejlesztés nagy meló lenne. Master-Slave megoldásra van szükségem relékártyák (ezek a Slave) vezérlésére.
(#) Stefan válasza blackdog hozzászólására (») Júl 8, 2012 /
 
Ha csak MASTER->SLAVEx irányban megy a koimmunikáció, szerintem a DMX-et lehetne használni.
Bár meg sose volt dolgom vele, ha jól tudom akkor ez annyiból áll, hogy egy fix felépítésű csomagot kiküld a buszra, ami minden slavehez tartozó adatot tartalmaz, keretet, CRC, stb..., és a slave-ek a címük által meghatározott "szeletet" szedik ki az adathalmazból.
Ezt nem lehet annyira bonyolult leprogramozni.
Következő: »»   454 / 840
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem