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   116 / 840
(#) TavIR-AVR válasza Barbár hozzászólására (») Ápr 2, 2009 /
 
12V-----ellenallas - 1k --------Proclab-----Zener 5V1----GND

5V1 zenerrel paralell egy 10K ellenallas.

Ha a12v helyen 12V van, a proclabon 5V.
Ha nincs 12V, akkor az 10k GNDre huzza....

De a zenert ha elhagyod, akkor sima ellenallasosztoval is jatszhatsz. itt a 12V mennyire 12? Auto? (ott lehet 14,4V is, és bekapcsolaskor az induktibv tuskek is. Igy a 10K-val paralell 100nF kondi es / vagy PKE51 jelu szupresszort (?).
(#) Sir-Nyeteg válasza Barbár hozzászólására (») Ápr 2, 2009 /
 
Én a 12V-ot egy ellenállással egy tranzisztorka bázisára kötöttem, emitterét a földre, kollektorát a proci lábára. Így a bejövő jel leföldeli a lábat. Természetesen felhúzó ellenállás belsőleg bekapcsolva.
Szoftveresen megadható, hogy tápot vagy földet, azaz "1"-et vagy "0"-át akarsz érzékelni.
(#) Thomm hozzászólása Ápr 2, 2009 /
 
Sziasztok
A következő bascom kódot hogyan kell modositani hogy felvillantson egymás után 3 ledet amik a port.0, port.1 és port.2 lábakra vannak kötve:

$regfile = "m168def.dat"
$crystal = 16000000

Config Portd = Output

Do

Portd = 255
Waitms 500
Portd = 0
Waitms 500


Loop

End

A válaszokat előre is köszönöm.
(#) wg_kezdo válasza Thomm hozzászólására (») Ápr 2, 2009 /
 
do

rem bekapcsoljuk a 0-ást
set portd.0
waitms 500
rem kikapcsoljuk a 0-ást
reset portd.0

set portd.1
waitms 500
reset portd.1

loop

(#) Barbár válasza TavIR-AVR hozzászólására (») Ápr 3, 2009 /
 
Azthiszem értem, hogy mire gondolsz.

Lejjebb "Sir-Nyeteg" írta is, hogy autóba lesz-e.
Igen, ezért gondoltam a tranzisztoros megoldásra, hogy a 12 (vagy esetenként akár 14,4V) csak a tranyót kapcsolgassa amin át egy 7805 -től kapott stabil 5V-ot kaphatna max a proci lába.

Egyébként ezt a megoldást esetleg ha nem túl nagy kérés le tudnád rajzolni, és fel tudnád tenni a rajzot valamilyen "köz-kompatibilis" formátumban (pl képként).

Köszi!

Üdv!

Barbár
(#) Barbár válasza Sir-Nyeteg hozzászólására (») Ápr 3, 2009 /
 
Az általad írt programozási oldalát is kezdem érteni a dolognak (nagyjából legalábbis).

Megkérhetnélek Téged is, h az általad elképzelt kapcsolásról egy rajzot fel tudnál tenni esetleg?

Plusz ha nem okoz gondot betennél egy néhány soros kis kódot is ahol ottvan, h a felhúzóellenállást hogyan kell bekapcsolni, és utána egy if() elágazásban, hogyan tudom megvizsgálni, h a megfelelő láb éppen IGEN vagy NEM jelet kapott-e.

Köszönöm előre is!

Üdv!

Barbár
(#) Sir-Nyeteg válasza Barbár hozzászólására (») Ápr 3, 2009 /
 
  1. #include <avr/io.h>
  2.           #include <util/delay.h>
  3.           #include <avr/eeprom.h>
  4.           #include <avr/interrupt.h>
  5.           #include <inttypes.h>
  6.  
  7. #define SZENZOR          (1<<PINC3)
  8.  
  9. int main(void)
  10. {
  11.         DDRC = (0<<PINC3) //bemenet
  12.         PORTC =(1<<PORTC3) //felhúzó ellenállat
  13.  
  14.  
  15.         if(PINC & SZENZOR)      // SZENZOR kapcsolt-e?
  16.         {
  17.         //hiperszuper programocska, ami lefut, ha volt bejövő jel, ami leföldelte a lábat.
  18.         }
  19. }

Mindezek megtalálhatóak Topi "Nyolc lábbal" cikkében, illetve ATtiny weboldalán, én innen másolgatom ki a kódokat.
(#) Barbár válasza (») Ápr 3, 2009 /
 
Köszi mindenkinek a "helpeket" (szép magyarsággal)

Amint lesz egy kis időm (tehát héfő reggel után), megcsinálom a próbaáramkört, aztán visszajelzek, h mi lett az eredmény...


U.I.:

Én eddig így szoktam megadni, hogy pl a PortB-n melyik legyen kimenet:

"DDRB = 0b011000;"

Az istenért sem akarok kötözködni, csak gondoltam leírom, hátha valakinek aki majd későb olvassa ezt így egyszerűbb....


Minden jót!

Barbár
(#) zsuscsinyo válasza Sir-Nyeteg hozzászólására (») Ápr 3, 2009 /
 
  1. #include < avr/io.h >
  2. #include < util/delay.h >
  3. #include < avr/eeprom.h >
  4. #include < avr/interrupt.h >
  5. #include < inttypes.h >
  6.  
  7. #define SZENZOR PINC&(1<<3)
  8.  
  9. int main(void){
  10.         DDRC &= ~(1<<3);        //bemenet
  11.         PORTC |= (1<<3);        //felhúzó ellenállás
  12.  
  13.  
  14.         if(!SZENZOR){      // SZENZOR kapcsolt-e?
  15.         //Ide jön a feltétel kezelése
  16.        
  17.         }
  18. }


Szia én inkább így csiálnám meg
Énis WinAvr-rel programozok, de még nem láttam ilyet, hogy a PINx regisztert shiftelnénk.


Idézet:
„PORTC =(1 << PORTC3)”


|= bitwise inclusive OR.
&= Bitwise AND.

Tehát így tudod állítani a PORTC 3.bitjét
PORTC |= (1 << PORTC3 ); //1-re állít
PORTC &= ~(1 << PORTC3 ); //0-ra állít
Ja és lemaradt a ; parancsok végéről, tuti hibaüzenetet küld a progi.
Javítsatok ki ha tévednék, ugyanis emberi dolog

A kódot nem teszteltem mert suliból írok.
(#) Thomm válasza wg_kezdo hozzászólására (») Ápr 3, 2009 /
 
Köszi, mindjárt ki is próbálom.
Van tippetek hogy hol lehet a TavIr-on kivül hozzájutni Bascom tutorialokhoz és egyszerü az alapfunkciókkal foglalkozó példaprogramokhoz?
(#) gerry válasza Thomm hozzászólására (») Ápr 3, 2009 /
 
Talán ITT ?
(#) Sir-Nyeteg válasza zsuscsinyo hozzászólására (») Ápr 3, 2009 /
 
Mentségem legyen:
az írás időpontja (pontosvessző)
ATtiny megírt programja (DDRC)
Azt a fránya "vagy" jelet tényleg lefelejtettem
Legközelebb jobban meggondolom, hogy hajnalban írjak-e.
(#) ATtiny válasza Sir-Nyeteg hozzászólására (») Ápr 3, 2009 /
 
Teljesen mindegy mit shifteltek a lényeg, hogy egyértelműen azonosítsa azt a lábat amit vizsgálni akartok. Ha megnézitek az AVR header file-ját akkor ez van benne:
  1. #define    PIND6   6
  2. #define    PIND5   5
  3. #define    PIND4   4
  4. #define    PIND3   3
  5. #define    PIND2   2
  6. #define    PIND1   1
  7. #define    PIND0   0


Tehát tökéletesen fog menni a kód. Lehet valóban nem szerencsés belekeverni a PIND -t, de épp ez volt kéznél és ez is tökéletesen azonosítja a lábakat.
(#) gtk hozzászólása Ápr 3, 2009 /
 
Sziasztok !

Egy keressel fordulnek hozzatok. Ha valakinek ideje, energiaja, es lehetosege lenne, es kiprobalna a modositott LCD drivert, annak nagyon orulnek. Ugyanis voltak visszajelzesek hogy nem mindig volt ok az inicializalas. Pl. AVR egetes utan nem indult az LCD, csak teljes aramtalanitas utan.. Az init-et most javitottam, de nincs lehetosegem kiprobalni. Viszont szeretnem lezarni vegre a cikket,..

Udv.



(#) vzoole válasza gtk hozzászólására (») Ápr 3, 2009 /
 
Bocsi hogy nem válaszoltam, csak le kellett adni a szakdogatervemet, és ráment az időm.
Este meglesem majd.
(#) gtk válasza vzoole hozzászólására (») Ápr 3, 2009 /
 
Raer. Es legyiszves ezt nezd meg amit az elobb linkeltem. Koszonom.
(#) tpeter válasza gtk hozzászólására (») Ápr 4, 2009 /
 
Displaytech 162b + ATMega32 @ 4MHz, belso oszcillatorral.
Megy frankón, és nagyon köszönöm!
(#) gtk válasza tpeter hozzászólására (») Ápr 4, 2009 /
 
De jo! Vegre.
Meg megvarom Zoli visszajelzeset is.

(#) vzoole válasza gtk hozzászólására (») Ápr 4, 2009 /
 
Sajnos negatív.

Nem megy, az új init, még táp reset-el se.

Ami szerintem egy hiba, hogy 8 bites módba kapcsoláskor DB4-DB5 1-re állítódik, de utánna nem állítja vissza semmi 0-ra. Így 4 bites módba kapcsolásnál nem csak a DB5 1-es, hanem a DB4-is.

Beraktam "LCD_PORT = 0x0;" a 8 bites mód után, de így se megy, lehet még kell egy-két delay.
(#) gtk válasza vzoole hozzászólására (») Ápr 4, 2009 /
 
Az itt talalhatot probaltad ki?
Bővebben: Link Es koszi hogy megnezted !
(#) gtk válasza tpeter hozzászólására (») Ápr 4, 2009 /
 
TPeter, neked melyik driver mukodott?
(#) vzoole válasza gtk hozzászólására (») Ápr 4, 2009 /
 
Igen, amit 5hsz-el ezelőtt csatoltál.

De ha megnézed amire gondoltam, elméletileg nem is működhetne.
(#) gtk válasza vzoole hozzászólására (») Ápr 4, 2009 /
 
Es ez?
(#) vzoole válasza gtk hozzászólására (») Ápr 4, 2009 /
 
nem..
ő... 2 soros mód bekapcsolása új függvénybe került, vagy csak kimaradt?

Mert én a saját programkörnyezetembe vizsgálom.
(#) tpeter válasza vzoole hozzászólására (») Ápr 4, 2009 /
 
ja, nekem is ezzel van gond. a 2. sort nem akarja izzitani
(#) vzoole válasza vzoole hozzászólására (») Ápr 4, 2009 /
 
Nálam most ebben a formában tökéletesen üzemel.
"portreset" is kimaradt, és így is jó, habár nem értem miért

Csak a 2 soros mód bekapcsolást visszatettem.

  1. /*---------2009_03_xx--------------------------------
  2.  *   Display initialization
  3.  *--------------------------------------------------*/
  4. void
  5. lcd_init (void)
  6. {
  7.   //The display will be busy for approximately 30mS after power ON.
  8.  
  9.   DDR = 0xFF;                   //DDR as out
  10.   LCD_PORT = 0x0;               //PORT = 0
  11.   lcd_delay_ms (40.0);          //wait 40ms after power ON
  12.  
  13. //-------------------------------------------------------------
  14. //8 bites módba kapcsolás (3x)˘˘-------------------------------
  15.  LCD_PORT = (1 << LCD_DB5) | (1 << LCD_DB4);
  16.   lcd_toggle_E ();
  17.   lcd_delay_ms (4.1);
  18.   lcd_toggle_E ();
  19.   lcd_delay_us (100);
  20.   lcd_toggle_E ();
  21.  
  22.   //LCD_PORT = 0x0;
  23.  
  24.   LCD_PORT = (1 << LCD_DB5);    //set 4-bit operation
  25.   lcd_toggle_E ();
  26.   lcd_delay_ms (5.0);         //wait more then 4.1ms
  27.   LCD_PORT = (1 << LCD_DB5);
  28.   lcd_toggle_E ();
  29.  
  30.   LCD_PORT = (1 << LCD_DB7);
  31.   lcd_toggle_E ();              //2 line mod, 5x8 fonts
  32.  
  33.   lcd_delay_us (39);            //39us
  34.  
  35.   LCD_PORT = 0x0;
  36.   lcd_toggle_E ();
  37.   LCD_PORT = (1 << LCD_DB7);
  38.   lcd_toggle_E ();              //Display ctrl: display off, cursor off, blink off
  39.   lcd_delay_us (39);
  40.  
  41.   LCD_PORT = 0x0;
  42.   lcd_toggle_E ();
  43.   LCD_PORT = (1 << LCD_DB4);
  44.   lcd_toggle_E ();              //clr
  45.   lcd_delay_ms (1.6);           //1.6ms
  46.  
  47.   LCD_PORT = 0x0;
  48.   lcd_toggle_E ();
  49.   LCD_PORT = (1 << LCD_DB6) | (1 << LCD_DB5);
  50.   lcd_toggle_E ();              //increment mode,entire shift off  
  51. }
(#) tpeter válasza vzoole hozzászólására (») Ápr 4, 2009 /
 
Igen, ezzel megy rendesen, neked is köszi!
(#) gtk válasza vzoole hozzászólására (») Ápr 4, 2009 /
 
Szia !

Igen a 2 soros mod lemaradt valamiert.
Most meg modositottam rajta egy keveset. Ha ezt meg valamikor kiprobalnad.. Aztan ezzel le is zarnam.
Koszi.
(#) Sir-Nyeteg hozzászólása Ápr 4, 2009 /
 
  1. TCCR1B |= (1<<WGM12)|(1<<CS11)|(1<<CS10);  // CTC mode,  preselect ratio : 64
  2.  
  3.         TCNT1 = 0;            // timer1 szamlaloja legyen 0
  4.     OCR1A = 62500;        // timer1 Compare A (1Hz)
  5.        
  6.         TIMSK |= (1<<OCIE1A); // timer1 Compare Match A megszakitas bekapcsolas
  7.        
  8.         sei();    //megszakítás bekapcsolás

Van ez a 16bites időzítőm.
Kérdésem: programból hogyan tudom leállítani ezt az időzítést? Milyen paranccsal? Köszi!
(#) Topi válasza Sir-Nyeteg hozzászólására (») Ápr 4, 2009 /
 
Előosztót kikapcsolod. CS1x-be mind 0-át írsz, akkor nem kap órajelet a timer és leáll.
Következő: »»   116 / 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