Willkommen! Anmelden Ein neues Profil erzeugen

Erweiterte Suche

Thermistor Table Teacup Kompilierfehler

geschrieben von josa 
Thermistor Table Teacup Kompilierfehler
29. January 2014 11:32
Hallo alle zusammen,
ich habe gerade ein problem bei der Firmware, an dem ich mir die Zäne ausbeiße. Ich habe als Temperatursensor fürs Hotend eien KTY 84-130. Bei zu dem ich gerade anhand von ein paar werten die ThermistorTable einträge erstellt habe. Hat auch super geklappt nur bringt Arduino immer einen Fehler, obwohl die Formatierung gleich ist, wie bei der Standarttabelle.

Die Werte habe ich mit folgendem Code erzeugt.
./createTemperatureLookup.py -- max-adc=1023 --r0=50p.py -- max-adc=1023 --r0=498 --t0=0 --r1=722 --t1=50 --r3=1000 --t3=100 --r4=1334 --t4=150 --r5=1722 --t5=200 --r6=2166 --t6=250

Im Code sah das dann so aus:
[www.spiegel.de] Thermistor lookup table for two different thermistors.

/*
   This table doesn't depend on the type of electronics, but on the type of
   thermistor(s) you use. You want one table for each thermistor type you use.
*/

// How many thermistor tables we have.
#define NUMTABLES 2

// Names for our tables, so you can use them in config.h.
// Table numbering starts at 0.
#define THERMISTOR_EXTRUDER   0
#define THERMISTOR_BED        1

/*
   You may be able to improve the accuracy of this table in various ways.

   1. Measure the actual resistance of the resistor. It's "nominally" 4.7K,
      but that's ± 5%.
   2. Measure the actual beta of your thermistor:
      [reprap.org]
   3. Generate more table entries than you need, then trim down the ones
      in uninteresting ranges.

   In either case you'll have to regenerate this table with
   createTemperatureLookup.py, which requires python, which is difficult to
   install on windows. Since you'll have to do some testing to determine the
   correct temperature for your application anyway, you may decide that the
   effort isn't worth it. Who cares if it's reporting the "right" temperature
   as long as it's keeping the temperature steady enough to print, right?
*/

// The number of value pairs in our table.
// Must be the same for all tables.
#define NUMTEMPS 102

const uint16_t temptable[NUMTABLES][NUMTEMPS][2] PROGMEM = {

// Table for the Extruder.
// Thermistor: EPCOS B57560G104F

// ./createTemperatureLookup.py --r0=100000 --t0=25 --r1=0 --r2=4555 --beta=4092 --max-adc=1023
/*
{
   {1, 3324}, //831.245067985 C
   {11, 1585}, // 396.252474229 C
   {21, 1325}, // 331.32932964 C
   {31, 1190}, // 297.645114323 C
   {41, 1101}, // 275.474490595 C
   {51, 1036}, // 259.168154846 C
   {61, 985}, // 246.369362718 C
   {71, 943}, // 235.884012164 C
   {81, 908}, // 227.028859934 C
   {91, 877}, // 219.378723164 C
   {101, 850}, // 212.652165901 C
   {111, 826}, // 206.653862026 C
   {121, 804}, // 201.243058701 C
   {131, 785}, // 196.3151827 C
   {141, 767}, // 191.790546509 C
   {151, 750}, // 187.607114114 C
   {161, 734}, // 183.715699896 C
   {171, 720}, // 180.076684692 C
   {181, 706}, // 176.657710401 C
   {191, 693}, // 173.432024496 C
   {201, 681}, // 170.377267302 C
   {211, 669}, // 167.474567825 C
   {221, 658}, // 164.70785891 C
   {231, 648}, // 162.063351148 C
   {241, 638}, // 159.529123527 C
   {251, 628}, // 157.094801199 C
   {261, 619}, // 154.751299129 C
   {271, 609}, // 152.49061616 C
   {281, 601}, // 150.305668094 C
   {291, 592}, // 148.190151275 C
   {301, 584}, // 146.138430239 C
   {311, 576}, // 144.145444526 C
   {321, 568}, // 142.206630857 C
   {331, 561}, // 140.317857748 C
   {341, 553}, // 138.475370233 C
   {351, 546}, // 136.675742876 C
   {361, 539}, // 134.915839614 C
   {371, 532}, // 133.192779262 C
   {381, 526}, // 131.503905728 C
   {391, 519}, // 129.846762188 C
   {401, 512}, // 128.219068561 C
   {411, 506}, // 126.618701801 C
   {421, 500}, // 125.043678555 C
   {431, 493}, // 123.492139831 C
   {441, 487}, // 121.962337391 C
   {451, 481}, // 120.452621604 C
   {461, 475}, // 118.961430553 C
   {471, 469}, // 117.487280209 C
   {481, 464}, // 116.028755524 C
   {491, 458}, // 114.584502302 C
   {501, 452}, // 113.153219732 C
   {511, 446}, // 111.733653483 C
   {521, 441}, // 110.324589267 C
   {531, 435}, // 108.924846792 C
   {541, 430}, // 107.533274022 C
   {551, 424}, // 106.148741686 C
   {561, 419}, // 104.770137965 C
   {571, 413}, // 103.396363295 C
   {581, 408}, // 102.026325232 C
   {591, 402}, // 100.658933307 C
   {601, 397}, // 99.2930938245 C
   {611, 391}, // 97.9277045264 C
   {621, 386}, // 96.5616490636 C
   {631, 380}, // 95.193791196 C
   {641, 375}, // 93.8229686397 C
   {651, 369}, // 92.4479864717 C
   {661, 364}, // 91.0676099844 C
   {671, 358}, // 89.6805568711 C
   {681, 353}, // 88.2854885992 C
   {691, 347}, // 86.8810008054 C
   {701, 341}, // 85.4656125124 C
   {711, 336}, // 84.0377539283 C
   {721, 330}, // 82.5957525369 C
   {731, 324}, // 81.1378171244 C
   {741, 318}, // 79.6620193031 C
   {751, 312}, // 78.1662719881 C
   {761, 306}, // 76.6483041443 C
   {771, 300}, // 75.1056309408 C
   {781, 294}, // 73.5355182138 C
   {791, 287}, // 71.9349398223 C
   {801, 281}, // 70.3005260563 C
   {811, 274}, // 68.6285006809 C
   {821, 267}, // 66.9146034001 C
   {831, 260}, // 65.153993415 C
   {841, 253}, // 63.3411281701 C
   {851, 245}, // 61.4696091069 C
   {861, 238}, // 59.5319829034 C
   {871, 230}, // 57.5194816754 C
   {881, 221}, // 55.4216779533 C
   {891, 212}, // 53.22601822 C
   {901, 203}, // 50.9171793761 C
   {911, 193}, // 48.4761601261 C
   {921, 183}, // 45.8789633185 C
   {931, 172}, // 43.094624341 C
   {941, 160}, // 40.0821493573 C
   {951, 147}, // 36.7855424039 C
   {961, 132}, // 33.1252686346 C
   {971, 115}, // 28.9825340427 C
   {981, 96}, // 24.1675388389 C
   {991, 73}, // 18.3466418647 C
   {1001, 43}, // 10.8401360547 C
   {1011, 0}, // -0.157748974426 C
},
*/
// {ADC, temp*4 }, // temp         Rtherm     Vtherm      resolution   power
{
   {   1,   2433}, //  608.44 C,        2 Ohm, 0.005 V, 118.68 C/count, 0.02mW
   {   4,   1595}, //  398.87 C,        6 Ohm, 0.020 V, 35.03 C/count, 0.06mW
   {   7,   1357}, //  339.46 C,       11 Ohm, 0.034 V, 15.35 C/count, 0.10mW
   {  10,   1225}, //  306.46 C,       16 Ohm, 0.049 V, 9.41 C/count, 0.15mW
   {  13,   1136}, //  284.16 C,       21 Ohm, 0.063 V, 6.65 C/count, 0.19mW
   {  16,   1070}, //  267.52 C,       26 Ohm, 0.078 V, 5.08 C/count, 0.23mW
   {  19,   1017}, //  254.35 C,       32 Ohm, 0.093 V, 4.09 C/count, 0.27mW
   {  22,    973}, //  243.50 C,       37 Ohm, 0.107 V, 3.41 C/count, 0.31mW
   {  25,    937}, //  234.30 C,       43 Ohm, 0.122 V, 2.91 C/count, 0.35mW
   {  28,    905}, //  226.33 C,       48 Ohm, 0.137 V, 2.54 C/count, 0.39mW
   {  31,    877}, //  219.31 C,       54 Ohm, 0.151 V, 2.25 C/count, 0.43mW
   {  34,    852}, //  213.04 C,       60 Ohm, 0.166 V, 2.02 C/count, 0.46mW
   {  37,    829}, //  207.38 C,       66 Ohm, 0.181 V, 1.83 C/count, 0.50mW
   {  40,    808}, //  202.21 C,       72 Ohm, 0.195 V, 1.67 C/count, 0.53mW
   {  43,    789}, //  197.47 C,       78 Ohm, 0.210 V, 1.54 C/count, 0.56mW
   {  46,    772}, //  193.08 C,       85 Ohm, 0.225 V, 1.43 C/count, 0.60mW
   {  49,    755}, //  189.00 C,       91 Ohm, 0.239 V, 1.33 C/count, 0.63mW
   {  52,    740}, //  185.18 C,       98 Ohm, 0.254 V, 1.25 C/count, 0.66mW
   {  55,    726}, //  181.59 C,      105 Ohm, 0.269 V, 1.17 C/count, 0.69mW
   {  58,    712}, //  178.20 C,      112 Ohm, 0.283 V, 1.11 C/count, 0.72mW
   {  61,    699}, //  174.99 C,      119 Ohm, 0.298 V, 1.05 C/count, 0.75mW
   {  64,    687}, //  171.94 C,      126 Ohm, 0.312 V, 1.00 C/count, 0.77mW
   {  67,    676}, //  169.03 C,      134 Ohm, 0.327 V, 0.95 C/count, 0.80mW
   {  70,    665}, //  166.25 C,      142 Ohm, 0.342 V, 0.91 C/count, 0.82mW
   {  73,    654}, //  163.59 C,      150 Ohm, 0.356 V, 0.88 C/count, 0.85mW
   {  76,    644}, //  161.03 C,      158 Ohm, 0.371 V, 0.84 C/count, 0.87mW
   {  79,    634}, //  158.56 C,      166 Ohm, 0.386 V, 0.81 C/count, 0.89mW
   {  82,    624}, //  156.19 C,      175 Ohm, 0.400 V, 0.78 C/count, 0.92mW
   {  85,    615}, //  153.89 C,      184 Ohm, 0.415 V, 0.76 C/count, 0.94mW
   {  88,    606}, //  151.67 C,      193 Ohm, 0.430 V, 0.73 C/count, 0.96mW
   {  91,    598}, //  149.51 C,      202 Ohm, 0.444 V, 0.71 C/count, 0.98mW
   {  94,    589}, //  147.41 C,      212 Ohm, 0.459 V, 0.69 C/count, 0.99mW
   {  97,    581}, //  145.38 C,      222 Ohm, 0.474 V, 0.67 C/count, 1.01mW
   { 100,    573}, //  143.39 C,      232 Ohm, 0.488 V, 0.66 C/count, 1.03mW
   { 103,    565}, //  141.45 C,      243 Ohm, 0.503 V, 0.64 C/count, 1.04mW
   { 106,    558}, //  139.56 C,      254 Ohm, 0.518 V, 0.63 C/count, 1.06mW
   { 109,    550}, //  137.71 C,      265 Ohm, 0.532 V, 0.61 C/count, 1.07mW
   { 112,    543}, //  135.90 C,      276 Ohm, 0.547 V, 0.60 C/count, 1.08mW
   { 115,    536}, //  134.12 C,      288 Ohm, 0.562 V, 0.59 C/count, 1.09mW
   { 118,    529}, //  132.38 C,      300 Ohm, 0.576 V, 0.58 C/count, 1.11mW
   { 121,    522}, //  130.67 C,      313 Ohm, 0.591 V, 0.57 C/count, 1.12mW
   { 124,    515}, //  128.99 C,      326 Ohm, 0.605 V, 0.56 C/count, 1.12mW
   { 127,    509}, //  127.33 C,      340 Ohm, 0.620 V, 0.55 C/count, 1.13mW
   { 130,    502}, //  125.70 C,      354 Ohm, 0.635 V, 0.54 C/count, 1.14mW
   { 133,    496}, //  124.09 C,      368 Ohm, 0.649 V, 0.53 C/count, 1.15mW
   { 136,    490}, //  122.51 C,      383 Ohm, 0.664 V, 0.53 C/count, 1.15mW
   { 139,    483}, //  120.94 C,      398 Ohm, 0.679 V, 0.52 C/count, 1.16mW
   { 142,    477}, //  119.39 C,      415 Ohm, 0.693 V, 0.51 C/count, 1.16mW
   { 145,    471}, //  117.85 C,      431 Ohm, 0.708 V, 0.51 C/count, 1.16mW
   { 148,    465}, //  116.34 C,      449 Ohm, 0.723 V, 0.50 C/count, 1.16mW
   { 151,    459}, //  114.83 C,      466 Ohm, 0.737 V, 0.50 C/count, 1.17mW
   { 154,    453}, //  113.34 C,      485 Ohm, 0.752 V, 0.50 C/count, 1.17mW
   { 157,    447}, //  111.86 C,      505 Ohm, 0.767 V, 0.49 C/count, 1.16mW
   { 160,    441}, //  110.38 C,      525 Ohm, 0.781 V, 0.49 C/count, 1.16mW
   { 163,    435}, //  108.92 C,      546 Ohm, 0.796 V, 0.49 C/count, 1.16mW
   { 166,    429}, //  107.46 C,      568 Ohm, 0.811 V, 0.48 C/count, 1.16mW
   { 169,    424}, //  106.01 C,      591 Ohm, 0.825 V, 0.48 C/count, 1.15mW
   { 172,    418}, //  104.57 C,      615 Ohm, 0.840 V, 0.48 C/count, 1.15mW
   { 175,    412}, //  103.13 C,      640 Ohm, 0.854 V, 0.48 C/count, 1.14mW
   { 178,    406}, //  101.69 C,      666 Ohm, 0.869 V, 0.48 C/count, 1.13mW
   { 181,    400}, //  100.25 C,      694 Ohm, 0.884 V, 0.48 C/count, 1.13mW
   { 184,    395}, //   98.81 C,      723 Ohm, 0.898 V, 0.48 C/count, 1.12mW
   { 187,    389}, //   97.37 C,      753 Ohm, 0.913 V, 0.48 C/count, 1.11mW
   { 190,    383}, //   95.93 C,      785 Ohm, 0.928 V, 0.48 C/count, 1.10mW
   { 193,    377}, //   94.49 C,      819 Ohm, 0.942 V, 0.48 C/count, 1.08mW
   { 196,    372}, //   93.04 C,      855 Ohm, 0.957 V, 0.48 C/count, 1.07mW
   { 199,    366}, //   91.59 C,      892 Ohm, 0.972 V, 0.49 C/count, 1.06mW
   { 202,    360}, //   90.12 C,      932 Ohm, 0.986 V, 0.49 C/count, 1.04mW
   { 205,    354}, //   88.65 C,      974 Ohm, 1.001 V, 0.49 C/count, 1.03mW
   { 208,    348}, //   87.17 C,     1019 Ohm, 1.016 V, 0.50 C/count, 1.01mW
   { 211,    342}, //   85.68 C,     1066 Ohm, 1.030 V, 0.50 C/count, 1.00mW
   { 214,    336}, //   84.17 C,     1117 Ohm, 1.045 V, 0.50 C/count, 0.98mW
   { 217,    330}, //   82.65 C,     1171 Ohm, 1.060 V, 0.51 C/count, 0.96mW
   { 220,    324}, //   81.10 C,     1229 Ohm, 1.074 V, 0.52 C/count, 0.94mW
   { 223,    318}, //   79.54 C,     1291 Ohm, 1.089 V, 0.52 C/count, 0.92mW
   { 226,    311}, //   77.96 C,     1358 Ohm, 1.104 V, 0.53 C/count, 0.90mW
   { 229,    305}, //   76.35 C,     1430 Ohm, 1.118 V, 0.54 C/count, 0.87mW
   { 232,    298}, //   74.72 C,     1508 Ohm, 1.133 V, 0.55 C/count, 0.85mW
   { 235,    292}, //   73.05 C,     1592 Ohm, 1.147 V, 0.56 C/count, 0.83mW
   { 238,    285}, //   71.35 C,     1684 Ohm, 1.162 V, 0.57 C/count, 0.80mW
   { 241,    278}, //   69.62 C,     1785 Ohm, 1.177 V, 0.58 C/count, 0.78mW
   { 244,    271}, //   67.84 C,     1895 Ohm, 1.191 V, 0.60 C/count, 0.75mW
   { 247,    264}, //   66.01 C,     2017 Ohm, 1.206 V, 0.61 C/count, 0.72mW
   { 250,    256}, //   64.13 C,     2152 Ohm, 1.221 V, 0.63 C/count, 0.69mW
   { 253,    248}, //   62.20 C,     2303 Ohm, 1.235 V, 0.65 C/count, 0.66mW
   { 256,    240}, //   60.19 C,     2472 Ohm, 1.250 V, 0.68 C/count, 0.63mW
   { 259,    232}, //   58.12 C,     2662 Ohm, 1.265 V, 0.70 C/count, 0.60mW
   { 262,    223}, //   55.95 C,     2879 Ohm, 1.279 V, 0.73 C/count, 0.57mW
   { 265,    214}, //   53.69 C,     3129 Ohm, 1.294 V, 0.77 C/count, 0.54mW
   { 268,    205}, //   51.31 C,     3418 Ohm, 1.309 V, 0.81 C/count, 0.50mW
   { 271,    195}, //   48.81 C,     3757 Ohm, 1.323 V, 0.85 C/count, 0.47mW
   { 274,    184}, //   46.14 C,     4162 Ohm, 1.338 V, 0.91 C/count, 0.43mW
   { 277,    173}, //   43.29 C,     4652 Ohm, 1.353 V, 0.97 C/count, 0.39mW
   { 280,    160}, //   40.22 C,     5258 Ohm, 1.367 V, 1.05 C/count, 0.36mW
   { 283,    147}, //   36.86 C,     6025 Ohm, 1.382 V, 1.15 C/count, 0.32mW
   { 286,    132}, //   33.15 C,     7031 Ohm, 1.396 V, 1.28 C/count, 0.28mW
   { 289,    115}, //   28.97 C,     8404 Ohm, 1.411 V, 1.46 C/count, 0.24mW
   { 292,     96}, //   24.14 C,    10392 Ohm, 1.426 V, 1.70 C/count, 0.20mW
   { 295,     73}, //   18.35 C,    13526 Ohm, 1.440 V, 2.06 C/count, 0.15mW
   { 298,     43}, //   11.00 C,    19200 Ohm, 1.455 V, 2.69 C/count, 0.11mW
   { 301,      2}, //    0.56 C,    32605 Ohm, 1.470 V, 4.01 C/count, 0.07mW
   { 301,      2}  //    0.56 C,    32605 Ohm, 1.470 V, 4.01 C/count, 0.07mW
},


// Thermistor table for the Heatbed.
// The thermistor used for this table was an Epocs B57560G104F

// ./createTemperatureLookup.py --r0=100000 --t0=25 --r1=0 --r2=4580 --beta=4092 --max-adc=1023
{
   {1, 3318}, // 829.616016745 C
   {11, 1582}, // 395.653631407 C
   {21, 1323}, // 330.84097107 C
   {31, 1188}, // 297.209646621 C
   {41, 1100}, // 275.07218256 C
   {51, 1035}, // 258.789398125 C
   {61, 984}, // 246.008594145 C
   {71, 942}, // 235.537654412 C
   {81, 906}, // 226.694443884 C
   {91, 876}, // 219.054455222 C
   {101, 849}, // 212.336691817 C
   {111, 825}, // 206.346127832 C
   {121, 803}, // 200.942223904 C
   {131, 784}, // 196.020563493 C
   {141, 766}, // 191.50157718 C
   {151, 749}, // 187.323319967 C
   {161, 733}, // 183.436677733 C
   {171, 719}, // 179.802088411 C
   {181, 705}, // 176.387240163 C
   {191, 692}, // 173.165418421 C
   {201, 680}, // 170.114295013 C
   {211, 668}, // 167.215025351 C
   {221, 657}, // 164.451564622 C
   {231, 647}, // 161.810142471 C
   {241, 637}, // 159.278854262 C
   {251, 627}, // 156.847339317 C
   {261, 618}, // 154.50652494 C
   {271, 608}, // 152.248420783 C
   {281, 600}, // 150.065952166 C
   {291, 591}, // 147.952823858 C
   {301, 583}, // 145.903407888 C
   {311, 575}, // 143.912650487 C
   {321, 567}, // 141.975994383 C
   {331, 560}, // 140.089313499 C
   {341, 552}, // 138.248857757 C
   {351, 545}, // 136.451206156 C
   {361, 538}, // 134.693226674 C
   {371, 531}, // 132.972041812 C
   {381, 525}, // 131.284998864 C
   {391, 518}, // 129.629644111 C
   {401, 512}, // 128.003700342 C
   {411, 505}, // 126.405047164 C
   {421, 499}, // 124.831703684 C
   {431, 493}, // 123.281813201 C
   {441, 487}, // 121.753629616 C
   {451, 480}, // 120.2455053 C
   {461, 475}, // 118.755880215 C
   {471, 469}, // 117.283272105 C
   {481, 463}, // 115.826267593 C
   {491, 457}, // 114.383514072 C
   {501, 451}, // 112.953712236 C
   {511, 446}, // 111.535609196 C
   {521, 440}, // 110.127992041 C
   {531, 434}, // 108.729681803 C
   {541, 429}, // 107.339527723 C
   {551, 423}, // 105.956401766 C
   {561, 418}, // 104.579193313 C
   {571, 412}, // 103.206803975 C
   {581, 407}, // 101.838142455 C
   {591, 401}, // 100.472119415 C
   {601, 396}, // 99.1076422777 C
   {611, 390}, // 97.7436098948 C
   {621, 385}, // 96.3789070256 C
   {631, 380}, // 95.0123985415 C
   {641, 374}, // 93.6429232791 C
   {651, 369}, // 92.2692874506 C
   {661, 363}, // 90.8902575047 C
   {671, 358}, // 89.5045523189 C
   {681, 352}, // 88.1108345795 C
   {691, 346}, // 86.7077011852 C
   {701, 341}, // 85.2936724726 C
   {711, 335}, // 83.8671800249 C
   {721, 329}, // 82.4265527738 C
   {731, 323}, // 80.9700010386 C
   {741, 317}, // 79.4955980642 C
   {751, 312}, // 78.0012585145 C
   {761, 305}, // 76.4847132388 C
   {771, 299}, // 74.9434794495 C
   {781, 293}, // 73.3748252113 C
   {791, 287}, // 71.7757268294 C
   {801, 280}, // 70.1428172972 C
   {811, 273}, // 68.4723233868 C
   {821, 267}, // 66.7599881711 C
   {831, 260}, // 65.0009746545 C
   {841, 252}, // 63.189744608 C
   {851, 245}, // 61.3199044379 C
   {861, 237}, // 59.3840065713 C
   {871, 229}, // 57.3732898485 C
   {881, 221}, // 55.2773347518 C
   {891, 212}, // 53.0835972837 C
   {901, 203}, // 50.7767658983 C
   {911, 193}, // 48.3378535447 C
   {921, 182}, // 45.7428809535 C
   {931, 171}, // 42.9609064421 C
   {941, 159}, // 39.9509663295 C
   {951, 146}, // 36.6571055471 C
   {961, 131}, // 32.9998468755 C
   {971, 115}, // 28.8604816153 C
   {981, 96}, // 24.0493448775 C
   {991, 72}, // 18.2330297294 C
   {1001, 42}, // 10.732298885 C
   {1010, 4} // 1.11618417895 C
}
};
Heraus kam aber diese Fehlermeldung:
In file included from temp.c:31:0:
ThermistorTable.h:1:5: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘:’ token
temp.c: In function ‘temp_sensor_tick’:
temp.c:183:12: error: ‘temptable’ undeclared (first use in this function)
temp.c:183:12: note: each undeclared identifier is reported only once for each function it appears in

Ich kann mir echt nicht erklären, wie der fehler passiert ich habe außer der ThermistorTable.h nichts geändert.

Grüße josa
Re: Thermistor Table Teacup Kompilierfehler
02. February 2014 09:30
Weis echt niemand was ??
Ich wäre echt dankbar für Tipps.
Grüße josa
In diesem Forum dürfen leider nur registrierte Teilnehmer schreiben.

Klicke hier, um Dich einzuloggen