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   760 / 760
(#) uedit válasza zombee hozzászólására (») Pé, 1:35 /
 
Szia.
Köszönöm az infót. Sikerült életre kelteni az STK500-as programozót.
Viszont lenne még egy kérdésem? A legtöbb AVR-es projektben, csak a HEX file van megadva, viszont az (STK500) programozóban vannak Fuses és Lock bitek. Ha ezek nincsenek megadva honnan tudom meg, hogy mit kell odaírnom? Előre is köszönöm a segítséget.
(#) istvanpepe hozzászólása Szo, 8:08 /
 
Sziasztok!
Segítséget kérnék.Nagyon kezdő vagyok
A csatolt fjl feltölthető ATmega328P-PU ra?
A szöveges része a fájlnak mire való?
A hex fájlokat még értem ,de a szövegessel nem tudok mit kezdeni.
Köszönöm a segítséget
(#) fifadani hozzászólása Szo, 10:31 /
 
Sziasztok!

Szeretnék Tőletek segítséget kérni. Próbálok kommunikálni egy atmega128-al UART-on keresztül.
Szépen küldi a nevemet soros porton keresztül a PC-mre. Ezzel nincs gond. DE! (megszakítással szeretném a fogadást létrehozni) Amikor byte érkezik a uC-re lefagy... Abból az állapotból csak a reset lendíti ki.

A kód:
  1. /*atmega128@16Mhz UART-perl kommunikacio gyakorlas*/
  2.  
  3. #include <avr/io.h>
  4. #include <util/delay.h>
  5. #include <avr/interrupt.h>
  6.  
  7. #define F_CPU 8000000UL
  8. #define baud_rate 9600
  9. #define UBRR_ertek F_CPU/16/baud_rate-1
  10.  
  11. void port_init(void);
  12. void uart_init(unsigned int UBRR_);
  13. void uart_kuld(unsigned char data0);
  14. unsigned char uart_fogad(void);
  15. volatile unsigned char data1;
  16.  
  17. int main(void)
  18. {
  19.         port_init();
  20.         uart_init(UBRR_ertek);
  21.  
  22.         sei();
  23.  
  24.         while(1)
  25.         {              
  26.                 uart_kuld('D');
  27.                 uart_kuld('a');
  28.                 uart_kuld('n');
  29.                 uart_kuld('i');
  30.                 uart_kuld('\n');
  31.  
  32.                 _delay_ms(60);
  33.                 PORTA ^=(1<<PA0);
  34.         }       
  35.  
  36. return 0;
  37. }
  38.  
  39. void uart_init(unsigned int UBRR_)
  40. {
  41.         UBRR0H |= (unsigned char) (UBRR_>>8);
  42.         UBRR0L |= (unsigned char) UBRR_;
  43.         UCSR0B |= (1<<TXEN0) | (1<<RXEN0) | (1<<RXCIE0);
  44.         UCSR0C |= (1<<UCSZ0) | (1<<UCSZ1);
  45.         UCSR0A |= (1<<RXC0);
  46. }
  47.  
  48. void port_init(void)
  49. {
  50.         DDRA |= 0x03;
  51. }
  52.  
  53. void uart_kuld(unsigned char data0)
  54. {
  55.         while(!(UCSR0A & (1<<UDRE)));
  56.         UDR0 = data0;   
  57. }
  58.  
  59. unsigned char uart_fogad(void)
  60. {
  61.         while ( !(UCSR0A & (1<<RXC0)) );
  62.  
  63.         return UDR0;
  64. }
  65.  
  66. ISR (USART0_RXC0_vect)
  67. {
  68.         PORTA ^= (1<<PA1);
  69. }


Köszi szépen!
(#) Sick-Bastard válasza fifadani hozzászólására (») Szo, 10:52 /
 
Adatlap 182. oldal:
Idézet:
„The Receive Complete (RXC) flag indicates if there are unread data present in the
receive buffer. This flag is one when unread data exist in the receive buffer, and zero
when the receive buffer is empty (i.e., does not contain any unread data).”


A kódban az UART megszakításban csak a Port A 1-es lábát "billegteted".
Mivel nem olvasod ki a UART adat regiszterét(UDR0) ezért a megszakítás folyamatosan aktív marad és csak az ISR fog futni.

  1. ISR (USART0_RXC0_vect)
  2. {
  3.         PORTA ^= (1<<PA1);
  4.         data1 =  uart_fogad();
  5. }
(#) kapu48 válasza fifadani hozzászólására (») Szo, 10:54 /
 
Elsőnek tisztázni kellene, hogy milyen frekin járatod az uC-t?

Mert végig 16MHz-vel számolsz, mégis 8MHz-nek definiáltad:
#define F_CPU 8000000UL ?
Ez alapján rosszul kalkulálja a fordító a baudRate értékét.
(#) fifadani válasza kapu48 hozzászólására (») Szo, 11:03 /
 
Az első sorban elírtam, most vettem észre. (megszokásból írtam 16-ot, ebben az alkalmazásban 8Mhzről üzemel)
Mit rontottam még el?
A hozzászólás módosítva: Szo, 11:04
(#) Sick-Bastard válasza istvanpepe hozzászólására (») Szo, 11:04 /
 
Igen. A BIN mappában a 2 hex közül az egyiket. Egyik görög, másik angolul írja ki az infókat a kijelzőre. (Gondolom) Neked a main_EN.hex kell.

A szöveges file-ok azok a forráskódok, amikből a fordító a hex(gépi) kódot készíti. Ha nem akarsz/nem kell a kódban módosításokat végezni, akkor azokkal nem is kell foglalkoznod.
Pl.: át lehet írni magyarra a kijelzőn szereplő szövegeket.
(#) istvanpepe válasza Sick-Bastard hozzászólására (») Szo, 11:48 /
 
Köszönöm.
Milyen fordítóval tudom beolvastatni a forráskódokat?
(#) fifadani válasza fifadani hozzászólására (») Szo, 11:51 /
 
Javítottam pár dolgot. De még mindig nem működik.

  1. /*atmega128@8Mhz UART-perl kommunikacio gyakorlas*/
  2.  
  3. #include <avr/io.h>
  4. #include <util/delay.h>
  5. #include <avr/interrupt.h>
  6.  
  7. #define F_CPU 8000000UL
  8. #define baud 9600
  9. #define baudrate ((F_CPU)/(baud*16UL)-1)
  10.  
  11. void port_init(void);
  12. void uart_init(void);
  13. void uart_kuld(unsigned char data0);
  14. unsigned char uart_fogad(void);
  15. volatile unsigned char data1;
  16.  
  17. int main(void)
  18. {
  19.         port_init();
  20.         uart_init();
  21.         sei();
  22.  
  23.         while(1)
  24.         {                     
  25.                 uart_kuld('D');
  26.                 uart_kuld('a');
  27.                 uart_kuld('n');
  28.                 uart_kuld('i');
  29.                 uart_kuld('\n');
  30.  
  31.                 _delay_ms(60);
  32.                 PORTA ^=(1<<PA0);
  33.         }       
  34.  
  35. return 0;
  36. }
  37.  
  38. void uart_init(void)
  39. {
  40.         UBRR0H |= (unsigned char) (baudrate>>8);
  41.         UBRR0L |= (unsigned char) baudrate;
  42.         UCSR0B |= (1<<TXEN0) | (1<<RXEN0) | (1<<RXCIE0);
  43.         UCSR0C |= (1<<UCSZ0) | (1<<UCSZ1);
  44.         UCSR0A |= (1<<RXC0);
  45. }
  46.  
  47. void port_init(void)
  48. {
  49.         DDRA |= 0x03;
  50. }
  51.  
  52. void uart_kuld(unsigned char data0)
  53. {
  54.         while(!(UCSR0A & (1<<UDRE)));
  55.         UDR0 = data0;   
  56. }
  57.  
  58. unsigned char uart_fogad(void)
  59. {
  60.         while ( !(UCSR0A & (1<<RXC0)) );
  61.         return UDR0;
  62. }
  63.  
  64. ISR(USART0_RXC0_vect)
  65. {
  66.         PORTA ^= (1<<PA1);
  67.         data1 =  uart_fogad();
  68. }
(#) fifadani válasza fifadani hozzászólására (») Szo, 12:09 /
 
Megvan!

Ennyit számít ha nincs ott a C betű?! Nincs valahol egy táblázat amiben össze vannak gyűjtve ezek az ISR makrók?
  1. ISR(USART0_RX_vect)
  2. {
  3.         unsigned char data1;
  4.  
  5.         data1 =  uart_fogad();
  6.         if(data1=='A')
  7.         {       PORTA |= (1<<PA1); }
  8.         if(data1=='a')
  9.         {       PORTA &= ~(1<<PA1); }
  10. }
(#) benjami válasza fifadani hozzászólására (») Szo, 12:34 /
 
De van. A fordító include könyvtárában a te esetedben az "iom128.h" file.
  1. #define USART0_RX_vect  _VECTOR(18)
(#) simona hozzászólása Szo, 22:31 /
 
Sziasztok! Kezdő vagyok az AVR-hez, segítséget szeretnék kérni.

Programozóm: USBasp V2.0
Egy orosz videóból találtam egy "Khazama AVR" nevű programot, amivel a kész .hex fájlt bele tudom égetni az AVR-be, és ez működik is! Az egyik AVR-es alapkapcsolásos cikkben lévő LED-es villogót megépítettem, illetve az előre lefordított .hex fájlt felhasználtam és azóta villog a LED.

Az én problémám viszont az, hogy nem tudok fordítani c-ből hex-be. Két úton is elindultam:

1. WinAVR: Programmer's Notepad-ben összeállítom a main.c-t, elmentem, hozzáadom a project-hez, MFile-al elkészítem a Makefile-t, és a [WinAVR] Make All-ra kattintva: FATAL ERROR hibaüzenet.

2. AVR Studio 4: Előkészítve mindent, Build-ra kattintva: "Build failed with 1 errors and 1 warnings..."

Itt akadtam el, előre köszönöm a segítséget!
(#) Sick-Bastard válasza istvanpepe hozzászólására (») Szo, 22:45 /
 
Én WinAVR-t használok, de AVR Studio-t (4-7 verziók)is lehet használni. A Studio funkcionalitásban gazdagabb.
(#) Sick-Bastard válasza simona hozzászólására (») Szo, 23:11 /
 
A kezdéshez én Patrick Hood-Daniel videóit használtam.

Newbiehack

Newbiehack - YouTube

Szépen lépésről lépésre mindent elmond, igaz angolul.
(#) toma3757 hozzászólása Vas, 0:37 /
 
Sziasztok!

Elkezdtem írni egy programot, de sajnos kb a felénél kiderült hogy a kommunikáció része sem megy.
Atmega48pa-ről van szó, a kódot próbáltam leegyszerűsíteni amennyire lehetett, sokadik próbálkozás után sem megy. Legutóbb a cikkek között található Egyszerű soros kommunikáció alapján akartam kipróbálni de nem igazán jött össze.

Jelenleg csak szimplán tovább kellene küldenie amit kap, de helyette az eredmény a képen látható(lentebb).Putty COM4(USB->TTL átalakító) keresztül az RX-TX el összekötve, Arduino az avr TX lábán. (Maga az átalakító működik)
Bármilyen karaktert küldök ez az eredménye.
Valaki találkozott már ilyennel? Mi lehet a probléma?
A kód tudom hogy nem szép, nem korrekt sok helyen, de mennie kellene valamint sokféle variációt is próbáltam már.
Maga a kód:
  1. #define F_CPU 7372800UL // rendszer orajel: 7.3728 MHz
  2. #define USART_BAUDRATE 9600 // soros kommunikacio sebessege: 9600 bps
  3. #define UBRR_ERTEK ((F_CPU / (USART_BAUDRATE * 16UL)) - 1) // UBRR
  4.  
  5.  
  6. #include <avr/io.h>
  7. #include <inttypes.h>
  8.  
  9. void USART_Init()
  10. {
  11.         UBRR0L = UBRR_ERTEK;
  12.         UBRR0H = (UBRR_ERTEK>>8);
  13.         UCSR0C =  (1<<UCSZ00)|(1<<UCSZ01);
  14.         UCSR0B = (1<<RXEN0) | (1<<TXEN0);
  15. }
  16. void USART_Transmit(char data )
  17. {
  18.         while ( !( UCSR0A & (1<<UDRE0)) );
  19.         UDR0 = data;   
  20. }
  21. char USART_Receive( void )
  22. {
  23.         /* Wait for data to be received */
  24.         while ( !(UCSR0A & (1<<RXC0)) );
  25.         /* Get and return received data from buffer */
  26.         return UDR0;
  27. }
  28. int main(void)
  29. {
  30.  
  31.         char data;
  32.         USART_Init();
  33.  
  34.         while (1)
  35.         {
  36.                 data = USART_Receive();
  37.                 USART_Transmit('[');
  38.                 USART_Transmit(data);
  39.                 USART_Transmit(']');
  40.         }
  41. }

Hiba:
Kép: Hivatkozás
A hozzászólás módosítva: Vas, 0:38
(#) rascal válasza toma3757 hozzászólására (») Vas, 1:18 / 1
 
Nem látszik, hogy a többi adat, pl paritás, stop bitek száma egyeznek-e. Az biztos jó? Én már jártam úgy, hogy csak akkor működött a kommunikáció, ha az AVR és az átalakító RX-TX kivezetései köze egy-egy 1KOhm-os ellenállást tettem. A probléma pontos okát nem tudom. Az
Update:
Az AVR neked is 7.37...MHz-n megy?
A hozzászólás módosítva: Vas, 1:21
(#) Sick-Bastard válasza toma3757 hozzászólására (») Vas, 7:47 / 1
 
Ahogy rascal is kérdezi: Külső 7,37Mhz-es kristályt használsz?
Én még a fuse bitekre is rákérdezek, hogy mik a beállításaik?
Ha ezeket nem módosítottad, akkor a belső 8Mhz-es oszcillátort használja, amit még 8-al el is oszt. Ekkor valójában csak 1Mhzen megy az AVR.

Ha nem módosítottál a fuse biteken, akkor az F_CPU-t írd át:
  1. #define F_CPU 1000000UL // rendszer orajel: 1 MHz


ill az USART_Init()-nél kapcsold be a dupla sbességet:
  1. UCSR0A |= (1<<U2X0);


csak így lesz elfogadható a hibaszázaléka(1Mhz-en).
(#) janikukac hozzászólása Vas, 8:47 /
 
Sziasztok!
Akad-e köztetek valaki szegedi, aki fel tudna nekem programozni egy ATMega kontrollert?
Üdv!
(#) simona válasza Sick-Bastard hozzászólására (») Vas, 9:32 /
 
Nagyon köszönöm, 5 perc alatt be tudtam állítani az AVR Studio-t, és sikerült minden!
(#) uedit hozzászólása Vas, 11:16 /
 
Szia mindenkinek!
Eléggé kezdő vagyok. Kérdésem: az *.ASM file-ből hogy lehet HEX filé-t készíteni az AtmelStudió, vagy a CodeVision programban. Köszönöm!
(#) ThompsoN hozzászólása Vas, 12:37 /
 
Sziasztok!

ATMega48PA-PU-val szeretnék egy akkumulátoros fúrógépből kiszerelt motort (12V-os) vezérelni. Ehhez egy IRLZ34N MOSFET-et használnék. A probléma az, hogy ha a PWM kitöltési tényezője kevesebb, mint 100%, akkor a motor megmozdul, de nem pörög föl.

  1. TCCR0A = (1 << COM0A1) | (1 << COM0B1) | (1 << WGM00);
  2. TCCR0B = (1 << CS01) | (1 << CS00);

Ha minden igaz, akkor így fázishelyes módban, 64-es előosztással megy az időzítő. A CPU 8MHz. A MOSFET-hez csatlakozó láb kimenet. Ha a kitöltés 100% (vagy sima I/O lábként próbálom, PWM nélkül), akkor gond nélkül megy a motor, a MOSFET nem melegszik egyáltalán.

A kapcsolás valahogy így néz ki. Lehet, hogy a 270 Ohmos ellenállás túl nagy, és ezért a MOSFET nem kapcsol be elég gyorsan?
A hozzászólás módosítva: Vas, 12:39

DSC_0222.JPG
    
(#) Robi98 hozzászólása Vas, 14:07 /
 
Sziasztok!

Építettem egy 7X8 RGB led mátrixot egy ATmega8-al és terveztem rá egy animációt.
Videó : ITT.
A probléma az, hogy az első piros sor(a kódban red[0]) értéke végig nulla marad. Pedig annak is fel kéne töltödnie 1-255-ig.

Akárhogy törtem a fejem nem találtam meg a hibát. A legmegdöbbentőbb az, hogy ha csak az animáció felét(mármint csak a feltöltődés efektust) rakom a végtelen ciklusba, akkor működik az első sor is.
A multiplexezés a 8 bites Timer2 interruptjában fut, azzal nincs gond, tökéletesen működik. Valahol a végtelen ciklusban lehet a hiba.
  1. while(1)
  2.         {
  3.  
  4.                         unsigned char s=1;
  5.  
  6.                         while(s)
  7.                         {
  8.                         red[0]=s;
  9.                         if(s>=7)
  10.                                 {
  11.                                 if(s==7) green[1]=(1);
  12.                                 if(s>7)
  13.                                         {
  14.                                         if(green[1]<255) green[1]=(2*green[1]+1);
  15.                                                 if(green[1]==7) blue[2]=1;
  16.                                                 if(green[1]>7)
  17.                                                         {
  18.                                                         if(blue[2]<255) blue[2]=(2*blue[2]+1);
  19.                                                                 if(blue[2]==7) red[3]=1;
  20.                                                                 if(blue[2]>7) 
  21.                                                                         {
  22.                                                                         if(red[3]<255) red[3]=(2*red[3]+1);
  23.                                                                                 if(red[3]==7) green[4]=1;
  24.                                                                                 if(red[3]>7)
  25.                                                                                         {
  26.                                                                                         if(green[4]<255) green[4]=(2*green[4]+1);
  27.                                                                                                 if(green[4]==7) blue[5]=1;
  28.                                                                                                 if(green[4]>7) 
  29.                                                                                                         {
  30.                                                                                                         if(blue[5]<255) blue[5]=(2*blue[5]+1);
  31.                                                                                                                 if(blue[5]==7) red[6]=1;
  32.                                                                                                                 if(blue[5]>7)
  33.                                                                                                                         {
  34.                                                                                                                         red[6]=(2*red[6]+1);
  35.                                                                                                                         }
  36.                                                                                                         }
  37.                                                                                         }
  38.                                                                         }
  39.                                                         }
  40.                                         }
  41.                                 }
  42.                         _delay_ms(100);
  43.                         if(s<255) s=(2*s+1);
  44.                         if(red[6]==255)
  45.                                 {
  46.                                         _delay_ms(100);
  47.                                         break;
  48.                                 }
  49.                         }
  50.  
  51. //**************************************************************************
  52.                 s=127;
  53.                         while(1)
  54.                         {
  55.                         red[0]=s;
  56.                         if(s<=63)
  57.                                 {
  58.                                 if(s==63) green[1]=127;
  59.                                 if(s<63)
  60.                                         {
  61.                                          green[1]=((green[1]-1)/2);
  62.                                          if(green[1]==63) blue[2]=127;
  63.                                          if(green[1]<63)
  64.                                                         {
  65.                                                         blue[2]=((blue[2]-1)/2);
  66.                                                                 if(blue[2]==63) red[3]=127;
  67.                                                                 if(blue[2]<63) 
  68.                                                                         {
  69.                                                                         red[3]=((red[3]-1)/2);
  70.                                                                                 if(red[3]==63) green[4]=127;
  71.                                                                                 if(red[3]<63)
  72.                                                                                         {
  73.                                                                                         green[4]=((green[4]-1)/2);
  74.                                                                                                 if(green[4]==63) blue[5]=127;
  75.                                                                                                 if(green[4]<63) 
  76.                                                                                                         {
  77.                                                                                                         blue[5]=((blue[5]-1)/2);
  78.                                                                                                                 if(blue[5]==63) red[6]=127;
  79.                                                                                                                 if(blue[5]<63)
  80.                                                                                                                         {
  81.                                                                                                                         red[6]=((red[6]-1)/2);
  82.                                                                                                                         }
  83.                                                                                                         }
  84.                                                                                         }
  85.                                                                         }
  86.                                                         }
  87.                                         }
  88.  
  89.                                 }
  90.                         _delay_ms(100);
  91.                         if(s>0) s=((s-1)/2);
  92.                         if(red[6]==0)
  93.                         {
  94.                         _delay_ms(100);
  95.                         break;
  96.                         }
  97.                 
  98.                         }
  99.                        
  100.         }


Szinte biztos vagyok benne, hogy a nálam tapasztaltabbak százszor egyszerűbben is meg tudnák írni az animációt, de én csak erre jutottam

Esetleg valami ötlet, hogy mi lehet a hiba?
(#) Robi98 hozzászólása Vas, 14:33 /
 
Elnézést, az előző kód miatt, elég rosszul sikerült a beillesztése. Itt az új:
  1. while(1)
  2. {
  3.  
  4. unsigned char s=1;
  5.  
  6. while(s)
  7. {
  8. red[0]=s;
  9.  
  10. if(s>=7)
  11. {
  12. if(s==7) green[1]=(1);
  13. if(s>7)
  14.         {
  15.         if(green[1]<255) green[1]=(2*green[1]+1);
  16.         if(green[1]==7) blue[2]=1;
  17.         if(green[1]>7)
  18.                 {
  19.                 if(blue[2]<255) blue[2]=(2*blue[2]+1);
  20.                 if(blue[2]==7) red[3]=1;
  21.                 if(blue[2]>7) 
  22.                         {
  23.                         if(red[3]<255) red[3]=(2*red[3]+1);
  24.                         if(red[3]==7) green[4]=1;
  25.                         if(red[3]>7)
  26.                                 {
  27.                                 if(green[4]<255) green[4]=(2*green[4]+1);
  28.                                 if(green[4]==7) blue[5]=1;
  29.                                 if(green[4]>7) 
  30.                                         {
  31.                                         if(blue[5]<255) blue[5]=(2*blue[5]+1);
  32.                                         if(blue[5]==7) red[6]=1;
  33.                                         if(blue[5]>7)
  34.                                                 {
  35.                                                 red[6]=(2*red[6]+1);
  36.                                                 }
  37.                                         }
  38.                                 }
  39.                         }
  40.         }
  41. }
  42. }
  43. _delay_ms(100);
  44. if(s<255) s=(2*s+1);
  45. if(red[6]==255)
  46.         {
  47.         _delay_ms(100);
  48.         break;
  49.         }
  50. }
  51.  
  52. //***************************************************************************
  53. s=127;
  54. while(1)
  55. {
  56. red[0]=s;
  57. if(s<=63)
  58. {
  59. if(s==63) green[1]=127;
  60. if(s<63)
  61. {
  62. green[1]=((green[1]-1)/2);
  63. if(green[1]==63) blue[2]=127;
  64. if(green[1]<63)
  65.                 {
  66.                 blue[2]=((blue[2]-1)/2);
  67.                 if(blue[2]==63) red[3]=127;
  68.                 if(blue[2]<63) 
  69.                         {
  70.                         red[3]=((red[3]-1)/2);
  71.                         if(red[3]==63) green[4]=127;
  72.                         if(red[3]<63)
  73.                                 {
  74.                                 green[4]=((green[4]-1)/2);
  75.                                 if(green[4]==63) blue[5]=127;
  76.                                 if(green[4]<63) 
  77.                                                 {
  78.                                                 blue[5]=((blue[5]-1)/2);
  79.                                                 if(blue[5]==63) red[6]=127;
  80.                                                 if(blue[5]<63)
  81.                                                         {
  82.                                                         red[6]=((red[6]-1)/2);
  83.                                                         }
  84.                                         }
  85.                                 }
  86.                         }
  87.                 }
  88. }
  89.  
  90. }
  91. _delay_ms(100);
  92. if(s>0) s=((s-1)/2);
  93. if(red[6]==0)
  94.         {
  95.         _delay_ms(100);
  96.         break;
  97.         }
  98.                 
  99. }
  100.                        
  101. }
(#) toma3757 válasza Sick-Bastard hozzászólására (») Vas, 21:06 /
 
Köszönöm a segítségeteket!

Paritás,stop bitek rendben voltak, de az órajel nem..
Nem módosítottam fuse biteket, nem használok külső oszcillátort.
Most működik, de még kellett egy kis módosítás az általad említetteken kívül:
  1. #define UBRR_ERTEK ((F_CPU / (USART_BAUDRATE * 8UL)) - 1) // UBRR


A 8-as osztást ki lehet kapcsolni fuse bitek módosításával?
Persze akkor F_CPU-t is át kell írni gondolom.
(#) Sick-Bastard válasza toma3757 hozzászólására (») Vas, 21:38 /
 
Igen ki lehet kapcsolni a fuse bitekkel.
Másik megoldás, hogy a kódba irod be a kikapcsolást.

  1. CLKPR = 0x80;
  2. CLKPR = 0;


Ezt beirod a kódod legelejére és igy 8Mhzen fog menni.
(#) Sick-Bastard válasza Robi98 hozzászólására (») Vas, 21:43 /
 
Egy debug javaslat, ezt:
  1. if(s>=7)
  2. ...

cseréld le erre:
  1. if(red[0]>=7)
  2. ...


Ha egyik fény sem fut, akkor valóban a red[0] változóval van a baj. Ha mégis lefut, akkor valahol máshol a megjelenitésben.
(#) rascal válasza toma3757 hozzászólására (») Vas, 21:44 /
 
Igen jól gondolod, viszont ezt a cikket olvasd el mielőtt belevágsz: Bővebben: Link. Másik hasznos dolog a fusebit doctor, néhány oldallal korábban adtam rá linket.
(#) Robi98 válasza Sick-Bastard hozzászólására (») Vas, 22:10 /
 
Köszi, a javaslatot. Kipróbáltam és semmi változás. Tehát az már biztos, hogy a red[0] értéke az folyamatosan növelődik. Valahol máshol lehet a hiba. Kipróbáltam, hogy a csökkenő részt kivettem az animációból: ha az összes feltöltődött, akkor lenullázódnak és újra kezdődik a feltöltődés. Na ott működik mindegyik oszlop. Fogalmam sincs, mi lehet a hiba.
(#) bandi777 hozzászólása 17:16 /
 
Üdv!

Open-suse alatt próbálkozok az avr-gcc -vel de sikertelenül.
A követketző hibát kapom mindíg:
  1. > avr-gcc -o thb.elf -mmcu=atmega128 main.o  serial.o  ...
  2. /usr/bin/avr-ld: warning: -z relro ignored.
  3. /usr/bin/avr-ld: cannot find -lm
  4. /usr/bin/avr-ld: cannot find -lc
  5. collect2: error: ld returned 1 exit status
  6. >


Valaki tud esetleg megoldást erre?
Illetve ha valaki tud küldeni egy AVR C forrásfájlokat HEX-re fordító minta makefile-t ami működőképes, azt örömmel fogadnám! (Lehet abban van a hiba?)
Előre is köszönettel!

B.
Következő: »»   760 / 760
Bejelentkezés

Belépés

Hirdetés
Frissek
2017. Jan, 16. Hé
20:14:18
Jelenleg 718 fő olvassa az oldalt
Online tagok:
Lapoda.hu     XDT.hu     HEStore.hu