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   759 / 837
(#) rascal válasza uedit hozzászólására (») Jan 21, 2017 /
 
Korrektül ismertetett projektnél valamilyen formában kitérnek erre. Egyébként meg forráskód mellett sem biztos, hogy minden beállításra rájössz.
(#) Kovidivi válasza rascal hozzászólására (») Jan 21, 2017 /
 
Annyira azért nem bonyolult, ami beállítható: külső vagy belső oszcillátor, ez egyértelmű, ha van kvarc külső, ha nincs, belső. Ha belső, akkor szerepel a forráskódban egy #define F_CPU 8000000 vagy hasonló, ebből lehet tudni mire kell beállítani. Reset lábat nem tiltanám le, csak úgy mint az SPI programozhatóságot sem. Bootloader kell vagy sem, ez talán egyértelmű. Ha ki van kapcsolva, akkor nem számít, hogy mekkorára van állítva. Lock biteket nem kell beállítani, más talán nincs is.
AtmelStudio gyönyörűen részletezi mit lehet állítani, plusz a szükséges fuse biteket hexadecimális számként is előállítja.
A hozzászólás módosítva: Jan 21, 2017
(#) Sick-Bastard válasza kapu48 hozzászólására (») Jan 22, 2017 /
 
Igazad lehet. Meg tudnád magyarázni mi is történik itt? Piszkál a kíváncsiság, mivel nem jövök rá.

Proteusban lefuttattam Robi98 kódját és valóban ott nem jelenik meg a red[0] értéke.
A lehető legkevesebb módosítással átírtam a kódot (megszabadultam az "s" változótól, meg kettő if()-től) és ekkor már minden megy is ahogy eltervezte.

Ahogy én értelmeztem Robi98 kódjának ezen részét:
- s=1-el kezd majd belép a while(s)-be
- red[0] felveszi "s" értékét -> red[0] = 1
- if(s>=7) hamis mivel "s" = 1 nem lép be az if-be
- 100ms várakozás, ezalatt (is) az ISR jópárszor elküldi az RGB adatokat, az első piros sornak itt már világítani kellene, de nem teszi
- ha "s" kisebb mint 255 , ami igaz, akkor s=(2*s+1) fut le, igy "s" értéke most 3 lesz, red[0] még csak 1
- ha red[6] egyenlő 255 akkor lépünk ki a while(s) ciklusból, ez hamis, maradunk a while(s)-ban

- visszakerültünk a while(s) elejére
- red[0] most (ismét) felveszi "s" értékét, red[0] = 3 lesz
- if(s>=7) most is hamis mivel "s" = 3 nem lép be az if-be
- 2.dik 100ms várakozás, az ISR-nak az első sorban már 2db piros LED et kellene megjelenítenie, de ismét nem teszi meg

... stb stb

Valamit félreértetek a kódban?

robi98.rar
    
(#) istvanpepe hozzászólása Jan 22, 2017 /
 
Sziasztok!
AVR studio4 ben build inditáskor az alábbi hibaüzrnrt generálódik:

Build started 22.1.2017 at 17:55:31
0 [main] sh 6680 sync_with_child: child 6108(0x1AC) died before initialization with status code 0xC0000142
70541 [main] sh 6680 sync_with_child: *** child state waiting for longjmp
/usr/bin/sh: fork: Resource temporarily unavailable

-------- begin --------
avr-gcc (WinAVR 20100110) 4.3.3
Copyright (C) 2008 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.


Size before:
0 [main] sh 3424 sync_with_child: child 5876(0x184) died before initialization with status code 0xC0000142
48678 [main] sh 3424 sync_with_child: *** child state waiting for longjmp
/usr/bin/sh: fork: Resource temporarily unavailable
make: *** [sizebefore] Error 128
Build failed with 1 errors and 0 warnings...

Mi lehet a hiba?
(#) rolandgw válasza istvanpepe hozzászólására (») Jan 22, 2017 /
 
(#) istvanpepe válasza rolandgw hozzászólására (») Jan 23, 2017 /
 
Köszönöm a segítséget, ez volt a probléma.
(#) vipera1997 hozzászólása Jan 23, 2017 /
 
Sziasztok!
Van egy problémám, kaptunk feladatot iskolában, de instrukciót semmit hogy hogyan kéne, ez a jöjjünk rá magunktól effektus van.Jelzőlámpát megcsináltam, de nem akar megállni a G1-gombra és ennyi lenne vele a problémám, feltöltöm ide a c és a hex fájlokat is hátha tud segíteni benne valaki.
A portok és a hivatkozások jó, de mégse akar működni...

A válaszokat előre is köszönöm.
A hozzászólás módosítva: Jan 23, 2017
(#) Kovidivi válasza vipera1997 hozzászólására (») Jan 23, 2017 /
 
A c fájl hiányzik. Az fcf_avr kiterjesztést meg senki sem ismeri rajtad kívül. Hex-et sem fogja senki assembly nyelvre visszafejteni gépi kódból.
(#) vipera1997 válasza Kovidivi hozzászólására (») Jan 23, 2017 /
 
Bocsánat!
Pótolom!
(#) Kovidivi válasza vipera1997 hozzászólására (») Jan 23, 2017 /
 
Ez még mindig nem a c fájl, tartalmát tekintve sem. Ennek a kiterjesztése fcf_avr.001. Miért nem rakod fel ide inább a Kód gombot megnyomva?
A hozzászólás módosítva: Jan 23, 2017
(#) vipera1997 válasza Kovidivi hozzászólására (») Jan 23, 2017 /
 
  1. //Változó deklarációk
  2. volatile char FCV_BE;
  3. volatile char FCV_GOMB;
  4.  
  5.  
  6.  
  7. //Makró implementációk
  8.  
  9. int main()
  10. {
  11.        
  12.         //Inicializálások
  13.         MCUCR=0x00;
  14.         MCUCSR=0x00;
  15.         wdt_disable();
  16.  
  17.  
  18.         //Megszakítás inicializáló kód
  19.         EICRA=0x00;
  20. EICRB=0x00;
  21.  
  22.  
  23.         //Ciklus
  24.         //Ciklus: Amíg1
  25.         while (1)
  26.         {
  27.                 //Kapcsolódási pont
  28.                 //Kapcsolódási pont: [A]: A
  29. FCC_FoFuggveny_A:
  30. ;
  31.  
  32.  
  33.                 //Bemenet
  34.                 //Bemenet: G1 -> gomb
  35.                 DDRG = DDRG & 0xfd;
  36.                 FCV_GOMB = ((PING & 0x02) == 0x02);
  37.  
  38.  
  39.                 //Bemenet
  40.                 //Bemenet: G0 -> Be
  41.                 DDRG = DDRG & 0xfe;
  42.                 FCV_BE = ((PING & 0x01) == 0x01);
  43.  
  44.  
  45.                 //Feltételes elágazás
  46.                 //Feltételes elágazás: Be?
  47.                 if (FCV_BE)
  48.                 {
  49.                         //Ciklus
  50.                         //Ciklus: Amíg1
  51.                         while (1)
  52.                         {
  53.                                 //Feltételes elágazás
  54.                                 //Feltételes elágazás: gomb?
  55.                                 if (FCV_GOMB)
  56.                                 {
  57.                                         //Menj a kapcsolódási porthoz
  58.                                         //Menj a kapcsolódási porthoz: [A]: A
  59.                                         goto FCC_FoFuggveny_A;
  60.  
  61.  
  62.                                         //Kimenet
  63.                                         //Kimenet: 0 -> B4
  64.                                         DDRB = DDRB | 0x10;
  65.                                         if (0)
  66.                                                 PORTB = (PORTB & 0xef) | 0x10;
  67.                                         else
  68.                                                 PORTB = PORTB & 0xef;
  69.  
  70.  
  71.                                         //Kimenet
  72.                                         //Kimenet: 0 -> B5
  73.                                         DDRB = DDRB | 0x20;
  74.                                         if (0)
  75.                                                 PORTB = (PORTB & 0xdf) | 0x20;
  76.                                         else
  77.                                                 PORTB = PORTB & 0xdf;
  78.  
  79.  
  80.                                         //Kimenet
  81.                                         //Kimenet: 0 -> B6
  82.                                         DDRB = DDRB | 0x40;
  83.                                         if (0)
  84.                                                 PORTB = (PORTB & 0xbf) | 0x40;
  85.                                         else
  86.                                                 PORTB = PORTB & 0xbf;
  87.  
  88.  
  89.                                 }
  90.  
  91.  
  92.                                 //piros
  93.                                 //Kimenet: 1 -> B4
  94.                                 DDRB = DDRB | 0x10;
  95.                                 if (1)
  96.                                         PORTB = (PORTB & 0xef) | 0x10;
  97.                                 else
  98.                                         PORTB = PORTB & 0xef;
  99.  
  100.  
  101.                                 //sárga
  102.                                 //Kimenet: 1 -> B5
  103.                                 DDRB = DDRB | 0x20;
  104.                                 if (1)
  105.                                         PORTB = (PORTB & 0xdf) | 0x20;
  106.                                 else
  107.                                         PORTB = PORTB & 0xdf;
  108.  
  109.  
  110.                                 //Feltételes elágazás
  111.                                 //Feltételes elágazás: gomb?
  112.                                 if (FCV_GOMB)
  113.                                 {
  114.                                         //Menj a kapcsolódási porthoz
  115.                                         //Menj a kapcsolódási porthoz: [A]: A
  116.                                         goto FCC_FoFuggveny_A;
  117.  
  118.  
  119.                                         //Kimenet
  120.                                         //Kimenet: 0 -> B4
  121.                                         DDRB = DDRB | 0x10;
  122.                                         if (0)
  123.                                                 PORTB = (PORTB & 0xef) | 0x10;
  124.                                         else
  125.                                                 PORTB = PORTB & 0xef;
  126.  
  127.  
  128.                                         //Kimenet
  129.                                         //Kimenet: 0 -> B5
  130.                                         DDRB = DDRB | 0x20;
  131.                                         if (0)
  132.                                                 PORTB = (PORTB & 0xdf) | 0x20;
  133.                                         else
  134.                                                 PORTB = PORTB & 0xdf;
  135.  
  136.  
  137.                                         //Kimenet
  138.                                         //Kimenet: 0 -> B6
  139.                                         DDRB = DDRB | 0x40;
  140.                                         if (0)
  141.                                                 PORTB = (PORTB & 0xbf) | 0x40;
  142.                                         else
  143.                                                 PORTB = PORTB & 0xbf;
  144.  
  145.  
  146.                                 }
  147.  
  148.  
  149.                                 //Késleltetés
  150.                                 //Késleltetés: 1 s
  151.                                 delay_s(1);
  152.  
  153.  
  154.                                 //Feltételes elágazás
  155.                                 //Feltételes elágazás: gomb?
  156.                                 if (FCV_GOMB)
  157.                                 {
  158.                                         //Menj a kapcsolódási porthoz
  159.                                         //Menj a kapcsolódási porthoz: [A]: A
  160.                                         goto FCC_FoFuggveny_A;
  161.  
  162.  
  163.                                         //Kimenet
  164.                                         //Kimenet: 0 -> B4
  165.                                         DDRB = DDRB | 0x10;
  166.                                         if (0)
  167.                                                 PORTB = (PORTB & 0xef) | 0x10;
  168.                                         else
  169.                                                 PORTB = PORTB & 0xef;
  170.  
  171.  
  172.                                         //Kimenet
  173.                                         //Kimenet: 0 -> B5
  174.                                         DDRB = DDRB | 0x20;
  175.                                         if (0)
  176.                                                 PORTB = (PORTB & 0xdf) | 0x20;
  177.                                         else
  178.                                                 PORTB = PORTB & 0xdf;
  179.  
  180.  
  181.                                         //Kimenet
  182.                                         //Kimenet: 0 -> B6
  183.                                         DDRB = DDRB | 0x40;
  184.                                         if (0)
  185.                                                 PORTB = (PORTB & 0xbf) | 0x40;
  186.                                         else
  187.                                                 PORTB = PORTB & 0xbf;
  188.  
  189.  
  190.                                 }
  191.  
  192.  
  193.                                 //zöld
  194.                                 //Kimenet: 1 -> B6
  195.                                 DDRB = DDRB | 0x40;
  196.                                 if (1)
  197.                                         PORTB = (PORTB & 0xbf) | 0x40;
  198.                                 else
  199.                                         PORTB = PORTB & 0xbf;
  200.  
  201.  
  202.                                 //piros
  203.                                 //Kimenet: 0 -> B4
  204.                                 DDRB = DDRB | 0x10;
  205.                                 if (0)
  206.                                         PORTB = (PORTB & 0xef) | 0x10;
  207.                                 else
  208.                                         PORTB = PORTB & 0xef;
  209.  
  210.  
  211.                                 //sárga
  212.                                 //Kimenet: 0 -> B5
  213.                                 DDRB = DDRB | 0x20;
  214.                                 if (0)
  215.                                         PORTB = (PORTB & 0xdf) | 0x20;
  216.                                 else
  217.                                         PORTB = PORTB & 0xdf;
  218.  
  219.  
  220.                                 //Feltételes elágazás
  221.                                 //Feltételes elágazás: gomb?
  222.                                 if (FCV_GOMB)
  223.                                 {
  224.                                         //Menj a kapcsolódási porthoz
  225.                                         //Menj a kapcsolódási porthoz: [A]: A
  226.                                         goto FCC_FoFuggveny_A;
  227.  
  228.  
  229.                                         //Kimenet
  230.                                         //Kimenet: 0 -> B4
  231.                                         DDRB = DDRB | 0x10;
  232.                                         if (0)
  233.                                                 PORTB = (PORTB & 0xef) | 0x10;
  234.                                         else
  235.                                                 PORTB = PORTB & 0xef;
  236.  
  237.  
  238.                                         //Kimenet
  239.                                         //Kimenet: 0 -> B5
  240.                                         DDRB = DDRB | 0x20;
  241.                                         if (0)
  242.                                                 PORTB = (PORTB & 0xdf) | 0x20;
  243.                                         else
  244.                                                 PORTB = PORTB & 0xdf;
  245.  
  246.  
  247.                                         //Kimenet
  248.                                         //Kimenet: 0 -> B6
  249.                                         DDRB = DDRB | 0x40;
  250.                                         if (0)
  251.                                                 PORTB = (PORTB & 0xbf) | 0x40;
  252.                                         else
  253.                                                 PORTB = PORTB & 0xbf;
  254.  
  255.  
  256.                                 }
  257.  
  258.  
  259.                                 //Késleltetés
  260.                                 //Késleltetés: 3 s
  261.                                 delay_s(3);
  262.  
  263.  
  264.                                 //Feltételes elágazás
  265.                                 //Feltételes elágazás: gomb?
  266.                                 if (FCV_GOMB)
  267.                                 {
  268.                                         //Menj a kapcsolódási porthoz
  269.                                         //Menj a kapcsolódási porthoz: [A]: A
  270.                                         goto FCC_FoFuggveny_A;
  271.  
  272.  
  273.                                         //Kimenet
  274.                                         //Kimenet: 0 -> B4
  275.                                         DDRB = DDRB | 0x10;
  276.                                         if (0)
  277.                                                 PORTB = (PORTB & 0xef) | 0x10;
  278.                                         else
  279.                                                 PORTB = PORTB & 0xef;
  280.  
  281.  
  282.                                         //Kimenet
  283.                                         //Kimenet: 0 -> B5
  284.                                         DDRB = DDRB | 0x20;
  285.                                         if (0)
  286.                                                 PORTB = (PORTB & 0xdf) | 0x20;
  287.                                         else
  288.                                                 PORTB = PORTB & 0xdf;
  289.  
  290.  
  291.                                         //Kimenet
  292.                                         //Kimenet: 0 -> B6
  293.                                         DDRB = DDRB | 0x40;
  294.                                         if (0)
  295.                                                 PORTB = (PORTB & 0xbf) | 0x40;
  296.                                         else
  297.                                                 PORTB = PORTB & 0xbf;
  298.  
  299.  
  300.                                 }
  301.  
  302.  
  303.                                 //zöld
  304.                                 //Kimenet: 0 -> B6
  305.                                 DDRB = DDRB | 0x40;
  306.                                 if (0)
  307.                                         PORTB = (PORTB & 0xbf) | 0x40;
  308.                                 else
  309.                                         PORTB = PORTB & 0xbf;
  310.  
  311.  
  312.                                 //Kimenet
  313.                                 //Kimenet: 1 -> B5
  314.                                 DDRB = DDRB | 0x20;
  315.                                 if (1)
  316.                                         PORTB = (PORTB & 0xdf) | 0x20;
  317.                                 else
  318.                                         PORTB = PORTB & 0xdf;
  319.  
  320.  
  321.                                 //Feltételes elágazás
  322.                                 //Feltételes elágazás: gomb?
  323.                                 if (FCV_GOMB)
  324.                                 {
  325.                                         //Menj a kapcsolódási porthoz
  326.                                         //Menj a kapcsolódási porthoz: [A]: A
  327.                                         goto FCC_FoFuggveny_A;
  328.  
  329.  
  330.                                         //Kimenet
  331.                                         //Kimenet: 0 -> B4
  332.                                         DDRB = DDRB | 0x10;
  333.                                         if (0)
  334.                                                 PORTB = (PORTB & 0xef) | 0x10;
  335.                                         else
  336.                                                 PORTB = PORTB & 0xef;
  337.  
  338.  
  339.                                         //Kimenet
  340.                                         //Kimenet: 0 -> B5
  341.                                         DDRB = DDRB | 0x20;
  342.                                         if (0)
  343.                                                 PORTB = (PORTB & 0xdf) | 0x20;
  344.                                         else
  345.                                                 PORTB = PORTB & 0xdf;
  346.  
  347.  
  348.                                         //Kimenet
  349.                                         //Kimenet: 0 -> B6
  350.                                         DDRB = DDRB | 0x40;
  351.                                         if (0)
  352.                                                 PORTB = (PORTB & 0xbf) | 0x40;
  353.                                         else
  354.                                                 PORTB = PORTB & 0xbf;
  355.  
  356.  
  357.                                 }
  358.  
  359.  
  360.                                 //Késleltetés
  361.                                 //Késleltetés: 1 s
  362.                                 delay_s(1);
  363.  
  364.  
  365.                                 //Feltételes elágazás
  366.                                 //Feltételes elágazás: gomb?
  367.                                 if (FCV_GOMB)
  368.                                 {
  369.                                         //Menj a kapcsolódási porthoz
  370.                                         //Menj a kapcsolódási porthoz: [A]: A
  371.                                         goto FCC_FoFuggveny_A;
  372.  
  373.  
  374.                                         //Kimenet
  375.                                         //Kimenet: 0 -> B4
  376.                                         DDRB = DDRB | 0x10;
  377.                                         if (0)
  378.                                                 PORTB = (PORTB & 0xef) | 0x10;
  379.                                         else
  380.                                                 PORTB = PORTB & 0xef;
  381.  
  382.  
  383.                                         //Kimenet
  384.                                         //Kimenet: 0 -> B5
  385.                                         DDRB = DDRB | 0x20;
  386.                                         if (0)
  387.                                                 PORTB = (PORTB & 0xdf) | 0x20;
  388.                                         else
  389.                                                 PORTB = PORTB & 0xdf;
  390.  
  391.  
  392.                                         //Kimenet
  393.                                         //Kimenet: 0 -> B6
  394.                                         DDRB = DDRB | 0x40;
  395.                                         if (0)
  396.                                                 PORTB = (PORTB & 0xbf) | 0x40;
  397.                                         else
  398.                                                 PORTB = PORTB & 0xbf;
  399.  
  400.  
  401.                                 }
  402.  
  403.  
  404.                                 //Kimenet
  405.                                 //Kimenet: 0 -> B5
  406.                                 DDRB = DDRB | 0x20;
  407.                                 if (0)
  408.                                         PORTB = (PORTB & 0xdf) | 0x20;
  409.                                 else
  410.                                         PORTB = PORTB & 0xdf;
  411.  
  412.  
  413.                                 //Kimenet
  414.                                 //Kimenet: 1 -> B4
  415.                                 DDRB = DDRB | 0x10;
  416.                                 if (1)
  417.                                         PORTB = (PORTB & 0xef) | 0x10;
  418.                                 else
  419.                                         PORTB = PORTB & 0xef;
  420.  
  421.  
  422.                                 //Késleltetés
  423.                                 //Késleltetés: 3 s
  424.                                 delay_s(3);
  425.  
  426.  
  427.                         }
  428.  
  429.  
  430.                 }
  431.  
  432.  
  433.         }
  434.  
  435.  
  436.         mainendloop: goto mainendloop;
  437. }


Erre gondolsz?
(#) Kovidivi válasza vipera1997 hozzászólására (») Jan 23, 2017 /
 
Az alapvető problémát már látom:
nincs semmi előre definiálva. Ha átlátható és jó kódot akarsz, akkor szét kell szednem részekre.
Nem tudom, hány lámpád van, de most legyen egy. Akkor kell neked piros be, piros ki, zöld be, zöld ki, sárga be, sárga ki. Kb. így: #define PIROS_BE PORTD|=(1<<PD3); csak mondtam egy példát. Ezután a programban mindenhol ezt használod: PIROS_BE. Így könnyen ki fogod szúrni a logikai hibákat. Ezután jöhetnek a függvények, pl. sarga_villog(); váltásnál csak fogod, és meghívod őt. Ezeket külön-külön tudod tesztelni.
Gombnyomásnál ugyanúgy, én így szoktam: if (GOMB_FEL) {fv();}. A GOMB_FEL pedig úgy definiálva, hogy ha le van nyomva a gomb, igazat ad vissza, ha nincs, akkor hamisat.
PORTB = (PORTB & 0xef) | 0x10; - ezek nagyon szépek, de ha 10 sornál hosszabb a program, már látod is, mi a következménye. Megmondhatod a tanárnak is, hogy ez nem hatékony módszer. Goto-t nem használunk! Ha egy gomb le van nyomva, akkor foglalkozni kell azzal is, hogy mikor végrehajtottad amit akartál, a gomb még mindig le lesz nyomva. Te sokkal gyorsabb vagy, mint hogy az ember fel tudja szegény gombot engedni. Meg kell várni, amíg elengedésre kerül! Ezt megteheted egy 50mS delay-jel is, de a legszebb megoldás megvárni, míg nem lesz lenyomva, és még várni egy kicsit, hogy a pergése is lecsengjen.
Ha ilyen sok if(0) meg if(1) van benne, igazán kiválogathattad volna a nem kellő részeket. Másrészt ha tényleg szeretnél váltogatni a két ág között, akkor érdemesebb if(valami) módon az összes összestartozót egyszerre állíthatóvá tenni, mint hogy mindegyik if(0)-t átírod 1-re.
PORTB = (PORTB & 0xef) | 0x10; - ezt még mindig nem értem, miért így csináljátok. Mióta tudja az ember hamarabb beazonosítani a 0xef-et, mint pl. a 0b11101111, vagy ~(1<<4);
Ezzel csak a saját dolgotokat nehezítitek meg.
(#) vipera1997 válasza Kovidivi hozzászólására (») Jan 23, 2017 /
 
Flowcode-ba dolgozunk és sajnos ő ezt kalibrálja be magának alapból..Semmi programozási nyelvet nem tanultunk, és ezt erőltetik mert ez grafikus és "egyszerű" de nem egyszer találkoztunk már program hibával, gondolok itt arra hogy programba rossz de a Tbird-be pedig kiválóan működik, vagy fordítva...Megpróbálom a te módszeredet, de vagyí 10-szer át kell még olvasnom legalább.
(#) Kovidivi válasza vipera1997 hozzászólására (») Jan 23, 2017 /
 
Akkor rakd be a Flowcode-os ablak képét, ahol látszanak az ábrák. Ahhoz nem értek, majd más ránéz.
(#) vipera1997 válasza Kovidivi hozzászólására (») Jan 23, 2017 /
 
Rendben, köszönöm.
Szerinted ha szövegesen akarom programozni az sok idő lenne megtanulni a programnyelvet?
(#) Kovidivi válasza vipera1997 hozzászólására (») Jan 23, 2017 /
 
Szövegesen programozni, vagyis flowcode nélkül? Olyan programot írni, mint amit a flowcode generál? Annak van csak értelme. Hogy időben mennyi? Személy függő. Inkább kezdj el Arduinozni, ha ott ráéreztél a lényegre, magadtól át fogsz lendülni a sötét oldalra
Én Arduino-ban próbálgattam a portműveleteket, a timereket, interruptot, és ment. Ezután elhagytam az Arduinot, majd félig visszatértem.
(#) vipera1997 válasza Kovidivi hozzászólására (») Jan 23, 2017 /
 
Értem, az a baj hogy nekem ebből májusban vizsgazni kellene.Addig rendbe kéne tenni valahogyan ezt a kérdést.
(#) csabeszq válasza Kovidivi hozzászólására (») Jan 24, 2017 /
 
Informatikusként érdekes látni ezeket a kriksz-krakszokat. Furcsa, hogy lassan 17 éve vagyok a szakmában, de még életemben nem csináltam ilyen flowcode-ot vagy mi a csodát.

Egyszer az életben vizsgára igazán megtanulhatod. Utána úgysem fogod használni semmire.

A hozzászólás módosítva: Jan 24, 2017
(#) vipera1997 válasza csabeszq hozzászólására (») Jan 24, 2017 /
 
Megtanulnám én ha elmondanák hogy kell, de ehhez a programhoz még leírást se találtam, hogy mi hogy működne, érdekelne a programozás azért gondoltam hogy nekiállok megtanulni szövegesen programozni, hogy ne vesszen kárba.Nincs valami egyszerű leírás a parancsokról és a használatukról esetleg?
A hozzászólás módosítva: Jan 24, 2017
(#) csabeszq válasza vipera1997 hozzászólására (») Jan 24, 2017 / 1
 
  1. Megtanulnám én ha elmondanák hogy kell


Sajnos az informatika nem így működik. Legalábbis az elmúlt 17 év alatt nem ezt tapasztaltam. Aki úszik fennmarad, aki nem úszik elsüllyed.

Töltsd le a programot és kezdj el vele valamit szórakozni. Úgy látom, hogy van belőle free verzió is.

Amikor kérdezik, hogy kifizessenek-e tanfolyamra x százezer forintot, mindig azt mondom, hogy felesleges. Ha érdekel, akkor előbb-utóbb megtanulod, ha pedig nem, akkor mással kellene foglalkozni.

Az informatika olyan szakma, hogy egyik munkahelyen orvosi ultrahangos műszereket fejlesztesz, a másikon vasúti forgalomirányítást, a harmadikon pénzügyi könyvelést, a negyedikben meg webáruházat. Senki sem fog leülni veled elmagyarázni az elejétől a végéig, vagy úszol és mész előre, vagy elvisz a sodrás.

(#) csabeszq válasza (Felhasználó 15355) hozzászólására (») Jan 24, 2017 /
 
  1. Neked a folyamatábra kriksz-krax?

Ebben a formában igen.

Valahol be kell látni, hogy a folyamatábra nem átlag-számításra való.
Az érintett nyelv folyamatábrával akarja megoldani 3 szám összeadását, a tapasztalat meg azt mutatja, hogy jobb elkerülni ezeket a nyelveket. Hatalmas kódot generálnak és nem lehet megoldani velük semmit. De ez csak a személyes élményem, 2 évig kellett dolgoznom ilyenen. Utána átírtuk C-be és a program sebessége azonnal 5-szörösére nőtt és mindenki átlátta, ráadásul licenszet sem kellett fizetni.

A folyamatábrát kizárólag magasabb szinten tartom elfogadhatónak, például ami az elektronikai adatlapokon van. Túllépnek azon a nehézségen, hogy hogyan történik 3 LED bekapcsolásának folyamata.
A hozzászólás módosítva: Jan 24, 2017
(#) pittyu2 hozzászólása Jan 24, 2017 /
 
Hali mesterek. Nektek bagatel aprósággal zavarlak benneteket. Meg akarom építeni -topi és zsiros dani_-
által közzétett 8 lábbal cikkből a ni-mh töltö attiny 13 al. A programot "pony 2000 proggal"szeretném betölteni de a FUSE biteket nem tudom mit állítsak. Valaki segítene ebben ?
(#) csabeszq válasza (Felhasználó 15355) hozzászólására (») Jan 24, 2017 /
 
  1. A folyamábrák mögött ugyanolyan C-nyelven megírt rutinok vannak, mint ami te is megírsz.


Konkrétan ezt a nyelvet nem ismerem. Amivel én dolgoztam napi 8 órában, az is C nyelvű rutinokat generált a folyamatábrából.
Mutatnám is:

  1. int zmq11349567767(const char * vm123453455444, int vm4556656757)
  2. {
  3.   int fv45346546546 = 0;
  4.   for( int v342dsrt3454 = 0; v342dsrt3454 < vm4556656757; v342dsrt3454++)
  5.   {
  6.     fv45346546546 += vm123453455444[v342dsrt3454];
  7.   }
  8.   return fv45346546546;
  9. }


Eszméletlen élmény volt például nyomkövetni, rajongásig odavoltunk érte.
(#) wbt hozzászólása Jan 25, 2017 /
 
Sziasztok!
Használ valaki XMEGA-t RS485-re DMA-val? Az a gondom, hogy a DMA-ready jel túl korán jön, hátra van még vagy 2 byte és az irányváltás portbitet csak várakozással tudom fordítani. Ez a HW pufferek miatt van, ami egy jó dolog egyébként, de nekem most pont ez a bajom.
(#) mTTamas hozzászólása Jan 25, 2017 /
 
Sziasztok!

Egy szögjeladó és egy AVR összekötéséhez kérek segítséget, tanácsot.

Szögjeladó: AEAT-9000-1GSH0 (link a dokumentációhoz)
AVR: ATmega32U4

A szögjeladó SSI segítségével kommunikál (dokumentáció szerint: "Interface output is SSI (2wire SSI / 3wire SSI) with RS485 line transceiver"). A kommunikáció hat vezetéken keresztül zajlik:
NSL+ Differential (for 3wire SSI only)
NSL- Differential (for 3wire SSI only)
DOUT- Differential DOUT (for 3wire/2wire SSI)
DOUT+ Differential DOUT (for 3wire/2wire SSI)
SCL+ Differential clock (for 3wire/2wire SSI)
SCL- Differential clock (for 3wire/2wire SSI)

A probléma a "differential"-lal van. Az elképzelésem az, hogy mind a hat vezetéket bekötöm az AVR digitális be/kimeneteire. A differenciális kimenő jeleket úgy szimulálnám, hogy amikor az egyik vezetékre 1-et írok akkor a másikra 0-t és fordítva. A beérkező jelpár esetén abban bízom, hogy elég a DOUT+ értékét figyelnem. Feltételezem, hogy az AVR beépített SPI-jét nem fogom tudni használni, ezért az órajelet és az adatbeolvasást "bitbang"-olnom kell (van erre magyar kifejezés?).
Szerintetek működni fog ez így?

Ami még fontos információ lehet:
- Az AVR és az érzékelő egyaránt 5V-os tápfeszről fog működni.
- A két eszköz közötti távolság max.3-4cm (NYÁK vezetékek hossza)

Segítségeteket előre köszönöm, Tamás
A hozzászólás módosítva: Jan 25, 2017
(#) wbt válasza mTTamas hozzászólására (») Jan 25, 2017 /
 
Szerintem így jó lesz. Ha beteszel egy invertert (1Gate/sot23/5), akkor tudod használni a beépített SPI-t is.
(#) csatti2 válasza wbt hozzászólására (») Jan 25, 2017 /
 
Próbáltad már, hogy a DMA_CHx helyett a TXC megszakításra hallgatsz (a DMA ugyebár a DRE flaget használja triggernek küldéskor)? Csak egy ötlet, mostanában nem programoztam XMEGA-t.
(#) wbt válasza csatti2 hozzászólására (») Jan 26, 2017 /
 
Akkor minden TX-re oda kell figyelnem, mondhatni, a DMA elvesztette a funkcióját. A soros dupla-puffer miatt ott is az utolsó byte elején kapok jelet, tehát az sem jó az irányváltás kezelésének, mert 1 byte még a HW pufferből csorog kifelé, mikor már "adómeghajtó üres" jelem lesz. Ez az egyik puffer, a másik meg a DMA puffere (amit leállítottam 1-re, 0-ra nem lehet sajnos). Egyéb esetekben nagyon jók ezek a dolgok (DMA lehet 4byte-os puffer is plusz a soros 2 byte-ja jó, de itt most várakozhatok). Biztos vagyok benne, hogy bennem a hiba, mert csak gondoltak az RS485-re...
(#) kapu48 válasza wbt hozzászólására (») Jan 26, 2017 /
 
A CPU elsőbbséget élvez a buszhasználat elérése terén a DMA-val szemben.
Ezért én nem kapcsolnám le a bemeneti adat pufferelést.

A DMA-t nagy mennyiségű adatok gyors átvitelére találták ki.
Ilyenkor nem jelentősen növeli az átviteli időt az utolsó Byte kézzel történő lekezelése a megszakításban.
(#) kapu48 válasza kapu48 hozzászólására (») Jan 26, 2017 /
 
Az én elképzelésem szerin azért van, elöl a megszakítás kérés, mert kel idő a megszakításba való belépéshez is. És mire odaér a vezérlés, hogy lekérdezze a DMA átvitel végét. Addigra már az nagyon kevés órajelen belül be is fog következni.

Szóval ez pontosan az átvitel gyorsítást szolgálja.
A hozzászólás módosítva: Jan 26, 2017
Következő: »»   759 / 837
Bejelentkezés

Belépés

Hirdetés
Lapoda.hu     XDT.hu     HEStore.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