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
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   602 / 602
(#) kokike28 válasza erdgab hozzászólására (») Sze, 11:34 /
 
Szia, megépitettem szimulátorba (Proteus 8) ezt a kapcsolást amit ajánlottál, de a kijelzön nem látszik semmi, ez gondolom azért van mert a külsö 20Mhz-es oszcilátort kellene használni, nem pedig ami az atmega8-ba van.
Hogy tudnám használni a külsö oszcilátort a szimulátorba ? az atmega8-ba a beálitásokba van lehetöség külsö oszcilátor használatára, de ha beálitok egyet, rögtön hibát ir ki (CKSEL fuse bits specify external oscillator but no CLOCK frequency is specified).
Hogy lehetne beálitani az atmega8-at hogy használja a külsö oszcilátort ?
A hozzászólás módosítva: Sze, 11:36
(#) fecus hozzászólása Sze, 20:13 /
 
Szeretnék egy olyan fényerőszabályzót építeni attiny45-ből vagy efféle kis eszközből, ami egy fényérzékelő és egy ledsor segítségével állandó megvilágítást tart egy területen. (monitor háttérvilágítása) A kínaiaktól vettem egy kis fénymérő panelt azt szólítaná meg a uC.
Tudtok valami linket, hogy miképpen kell egy ilyen szabályzó algoritmust C-ben megírni ami belefér egy ilyen kis eszközbe?
(#) kapu48 válasza fecus hozzászólására (») Csü, 7:28 /
 
Ilyen kis eszközben inkább ASM-ban irnám.
Pl. itt van valami hasonló:
Ledline Intensity control for LEDs with ATtiny13

Bővebben: Link
(#) pluto válasza kapu48 hozzászólására (») Csü, 7:41 /
 
Tudom hogy reggel van, de sikerült a saját E:\ meghajtódat belinkelni.
(#) kapu48 válasza pluto hozzászólására (») Csü, 7:51 /
 
Jé, Tényleg! Valaki törölhetné!

Akkor innen szedtem le, azt hiszem az alsó link:
Bővebben: Link
(#) Sick-Bastard hozzászólása Csü, 16:39 /
 
Üdv!

A mai nap egy ATmega1284P-vel történő SD kártya kezelésével szerettem volna megismerkedni.

Hogy lássam mit is csinálok, hol akadok el, a parancsokat HyperTerinalban kiíratom magamnak.
A gond nem váratott sokat magára. Egy tesztelő ciklust szerettem volna létrehozni az R1 (Response 1) adat tesztelésére.

Elsőre egy if loop-ot hoztam létre:

  1. if(R1 != 0x01)                 
  2.         {
  3.                 R1 = SPIWRD(0xFF);                             
  4.                 USART0_TX_String("Response 1: ");
  5.                 itoa(R1, StringA, 10);
  6.                 USART0_TX_String(StringA);
  7.                
  8.                 USART0_TXD(10);     
  9.                 USART0_TXD(13);
  10.                 _delay_ms(250);
  11.         }


A gond, hogy ekkor csak azokat a válaszokat írja ki, amik nem egyenlőek 0x01-el.

Ekkor while-ra gondoltam, de hamar rájöttem, hogy ez sem lesz jó. Majd beugrott a do{}while(); ciklus:
  1. do
  2.         {
  3.                 R1 = SPIWRD(0xFF);                             
  4.                 USART0_TX_String("Response 1: ");
  5.                 itoa(R1, StringA, 10);
  6.                 USART0_TX_String(StringA);
  7.                
  8.                 USART0_TXD(10);      
  9.                 USART0_TXD(13);
  10.                 _delay_ms(250);
  11.         }while(R1 != 0x01);


Ez azonban valamiért nem áll le nekem, még ha R1 == 0x01.

HyperTreminalban ezt kapom:
  1. CMD1 Send
  2. Response 1: 255
  3. Response 1: 1
  4. Response 1: 255
  5. Response 1: 255
  6. Response 1: 255


Még nem használtam ezt a hátultesztelős(jól tudom, hogy így hívják?) ciklust, szóval valamit elírtam?

SB
(#) Sick-Bastard válasza Sick-Bastard hozzászólására (») Csü, 18:25 /
 
Ok ez a probléma megoldva.
(#) Droot hozzászólása Csü, 19:25 /
 
Sziasztok!

Soros porton szeretnék egy szót küldeni a pc (pl2302 usb - rs232 konverter) felé.
Az alábbi függvényt írtam meg és nem jelenik meg a pc-n amit küldök az avr-el:
  1. void UARTAdatKuld(unsigned char data[10]) // Ez a fuggveny a kuldendo adatot beirja az UDR regiszter kimeno pufferjebe
  2. {
  3.  
  4. for(int i=0;i<=strlen(data);i++)
  5. {
  6.     while(!(UCSRA & (1<<UDRE)))  // Varakozas amig az Ado kesz nem lesz az adatkuldesre
  7.    {
  8.       //  Varakozas
  9.    }
  10.    // Az Ado mar kesz az adatkuldesre, a kuldendo adatot a kimeno pufferjebe irjuk
  11.    UDR=data[i];
  12.   }
  13. }
  14.  
  15. UARTAdatKuld("teszt");


Viszont az
  1. UARTAdatKuld(UARTAdtFogad());

kombóval visszaküldi amit elküldök neki.

Mi a gond a függvényemmel?
(#) vzoole válasza Droot hozzászólására (») Csü, 19:36 /
 
Nem tudom mi a baja, de talán egy tömböt nem kéne áttolni a stack-en.

Ez megy:
  1. void UARTsendDATA(char data)
  2. {
  3.       while(!(UCSRA & (1<<UDRE))) {}
  4.       UDR=data;
  5. }
  6.  
  7. void UARTsendTEXT(char *p)
  8. {
  9.       while(*p) {UARTsendDATA( *p++);}
  10. }
(#) Droot válasza vzoole hozzászólására (») Csü, 21:44 /
 
Köszi! Megy. Fogadásnál hogy fogadsz egész szót?
Következő: »»   602 / 602
Bejelentkezés

Belépés

Hirdetés
Frissek
2014. Ápr, 19. Szo
13:56:41
Jelenleg 415 fő olvassa az oldalt
Online tagok:
Lapoda.hu     XDT.hu     HEStore.hu