Forum: Compiler & IDEs Atmel Studio 6 kompiliert Nixie Programm für ATmega8 nicht


von Avr N. (avr-noob)


Lesenswert?

Hi,

ich bin neu im Forum und hoffe, daß es für meine vermutlich banale 
Anfänger Frage eine Antwort und Lösung gibt.

Mein Ziel ist der Aufbau dieser Nixie Uhr: http://daduke.org/nixie/

Die Programmierung des ATMEL ATmega8-16PU macht unerwartet Probleme. Der 
Autor hat damals über diesen Weg 
(http://main.linuxfocus.org/English/November2004/article352.shtml) und 
diese Programme 
(http://main.linuxfocus.org/common/src/article231/avrledtest-0.1.tar.gz) 
mit einem Parallelschnittstellen Programmierer dieses Programm 
http://daduke.org/dl/nixie/avrledtest.c auf einen ATmega8 geladen.
1
*  nixie.c
2
 *
3
 *  DCF77 radio controlled Nixie clock software
4
 *  for Atmel 4433 or mega8 microcontrollers
5
 *
6
 *  (c) 2003 by daduke <daduke@daduke.org>
7
 *
8
 *  GPL license - use at your own risk
9
 */
10
11
//#include <iom8.h> 
12
#include <avr/io.h>
13
#include <avr/interrupt.h>
14
#include <avr/signal.h>
15
16
volatile void out2(uint8_t group, uint8_t value);  //output 2 digits
17
volatile void out1(uint8_t digit, uint8_t value);  //output 1 digit
18
19
volatile uint8_t ictr, bitctr, date, newsec, first15;
20
volatile uint8_t sec, min, hour, day, mon, year, lmin, lhour;
21
volatile uint8_t bit, dcf_in, last_one, duration, time_ready;
22
volatile uint16_t dctr;
23
24
volatile uint8_t bits[38];    //hilarious waste of memory, but wtf...
25
26
27
//SIGNAL (SIG_OVERFLOW0)  //generates 250 interrupts/sec
28
SIGNAL(SIG_OUTPUT_COMPARE1A) {
29
//  outp(0,TCNT0);    /* reload timer with initial value */
30
31
  if (++ictr==250) {  //if one second has passed
32
    ictr = 0;  //reset
33
34
    if (++sec==60) {  //new minute
35
      sec = 0;    //inc sec and reset if 60
36
      if (++min==60) {
37
        min = 0;
38
        if (++hour==24) {
39
          hour = 0;
40
        }
41
      }
42
    }
43
    newsec = 1;
44
  }
45
  dctr++;  //inc pulse length counter
46
47
48
  dcf_in = (uint8_t)bit_is_clear(PINB,1);  //probe DCF signal
49
  if (dcf_in) {    //DCF input is high
50
        if (!last_one) {  //beginning of a pulse
51
            if (dctr > 450 && dctr < 550) {    //one pulse was missing -> new minute
52
              ictr = 0;      //reset interrupt counter: new sec starts NOW
53
              sec = 0;        //and it's the first
54
              bitctr = 0;      //reset bit counter
55
              first15 = 0;    //the first 15 bits in the DCF signal are 0, and we use them as a sort of quality indicator
56
             }
57
             dctr = 0;  //reset pulse length counter
58
59
        }
60
  } else {        //DCF is low
61
        if (last_one) {    //a pulse just ended
62
             duration = dctr;    //length = # ticks
63
             if (duration > 19 && duration < 31) {    //we got a low
64
                  bit = 1;
65
             } else if (duration > 44 && duration < 56) {  //got a hi
66
                  bit = 2;
67
             } else bit = 0;  //something else -> bad signal?
68
             if (bit) {      //for hi or low
69
                  if (bitctr < 15 && bit == 1) {  //sum up the first 15 bits
70
                    first15++;
71
                  } else if (bitctr > 20 && bitctr < 59) {    //store the bit
72
                    bits[bitctr-21] = bit-1;
73
                  }
74
                  bitctr++;    //inc bit counter
75
             }
76
        }
77
  }
78
  if ((first15 == 15) && (bitctr == 58)) {    //if all bits are received and the first 15 were 0
79
        time_ready = 1;  //we can compute and update the time
80
        first15 = 0;
81
  }
82
  last_one = dcf_in;    //store the state of the DCF signal for the next iteration
83
84
//  if ((hour == 0) && (min == 2) && (sec == 35)) { cbi(PORTC, 3); sbi(PORTB, PB0); }  //trigger the DCF77 receiver 2 min after midnight
85
//  if ((hour == 0) && (min == 2) && (sec == 45)) cbi(PORTB, PB0);
86
  
87
  
88
}
89
90
91
volatile int main( void )
92
{
93
  outp(0xFF,DDRD);    /* use all pins on PORTD for output: 2xBCD */
94
  outp(0x0F,DDRC);    /* use lower 4 pins on PORTC for output: latch select + HV control */
95
  outp(0x01,DDRB);    /* use lowest pin on PORTB for output: sync DCF77 */
96
97
//  outp((1<<TOIE0),TIMSK); /* enables the T/C0 overflow interrupt in the T/C interrupt mask register for */
98
//  outp(0,TCNT0);    /* start value of T/C0 */
99
//  outp(3,TCCR0);    /* prescale clk/64 */
100
//  sbi(TWCR, TWEN);  //enable I2C for temp sensor
101
102
  TIMSK = _BV(OCIE1A);
103
  TCCR1B = _BV(CS12)    // 256 prescale
104
         | _BV(WGM12);  // CTC mode, TOP = OCR1A
105
  OCR1A = 63;        // count up to TOP 1Hz with 4.096 meg system clock
106
107
108
  sbi(PORTC, 3);    //turn on HV supply
109
110
  sbi(PORTC, 1);
111
  outp(255,PORTD);
112
  cbi(PORTC, 1);
113
  for (ictr=0; ictr<10; ictr++) {  //power-on tube test, counting 0..9 and back
114
    for (bitctr=0; bitctr<6; bitctr++) {
115
          out1(bitctr, ictr);
116
          for (dctr=0; dctr<20000; dctr++) sec++;
117
    }
118
  }
119
/*  for (ictr=8; ictr=2; ictr--) {
120
    for (bitctr=0; bitctr<6; bitctr++) {
121
          out1(bitctr, ictr);
122
          for (dctr=0; dctr<20000; dctr++) sec++;
123
    }
124
  } */
125
126
  for (ictr = 0; ictr < 37; ictr++) bits[ictr] = 0;    //set all bits to 0
127
  sec = dctr = ictr = bitctr = last_one = time_ready = 0;
128
  first15 = 0;
129
130
  sei();    /* set global interrupt enable */
131
132
  while(1) {  
133
    if (time_ready) {    //compute and update time
134
      lmin = bits[0] + (bits[1]<<1) + (bits[2]<<2) + (bits[3]<<3)
135
           + ( bits[4] + (bits[5]<<1) + (bits[6]<<2))*10;
136
      lhour = bits[8] + (bits[9]<<1) + (bits[10]<<2) + (bits[11]<<3)
137
           + ( bits[12] + (bits[13]<<1))*10;
138
      day = bits[15] + (bits[16]<<1) + (bits[17]<<2) + (bits[18]<<3)
139
           + ( bits[19] + (bits[20]<<1))*10;
140
      mon = bits[24] + (bits[25]<<1) + (bits[26]<<2) + (bits[27]<<3)
141
           + bits[28]*10;
142
      year = bits[29] + (bits[30]<<1) + (bits[31]<<2) + (bits[32]<<3)
143
           + ( bits[33] + (bits[34]<<1) + (bits[35]<<2) + (bits[36]<<3))*10;
144
      hour = lhour;
145
      min = lmin - 1;
146
      time_ready = 0;
147
    }
148
    if (newsec) {
149
      date = (sec > 30 && sec < 35 && min % 2);  //show the date every odd minute for some seconds
150
        if (!date) {
151
            out2(2, hour);
152
            out2(1, min);
153
            out2(0, sec);
154
        } else {
155
            out2(2, day);
156
            out2(1, mon);
157
            out2(0, year);
158
        }
159
      newsec = 0;
160
    }
161
  }
162
}
163
164
volatile void out2(uint8_t group, uint8_t value) {
165
  uint8_t byte;
166
167
  if (group == 2 && value < 10) byte = (uint8_t)(10<<4) + (uint8_t)(value % 10); else    //leading zero suppression
168
        byte = (uint8_t)((value / 10)<<4) + (uint8_t)(value % 10);
169
  sbi(PORTC, group);
170
  outp(byte,PORTD);
171
  cbi(PORTC, group);
172
}
173
174
volatile void out1(uint8_t digit, uint8_t value) {
175
  uint8_t byte, group;
176
177
  group = 2 - (uint8_t)(digit / 2);
178
  if (!(digit %  2)) {
179
        byte = (uint8_t)(value<<4) + (uint8_t)(11);
180
  } else {
181
        byte = (uint8_t)(10<<4) + (uint8_t)(value);
182
  }
183
  sbi(PORTC, (group+1) % 3);
184
  outp(255,PORTD);
185
  cbi(PORTC, (group+1) % 3);
186
  sbi(PORTC, group);
187
  outp(byte,PORTD);
188
  cbi(PORTC, group);
189
}

Ich habe jetzt Atmel Studie 6 sowie (vermutlich überflüssigerweise 
nochmal separat) die ATMEL Windows Tool Chain 
(http://www.atmel.com/tools/ATMELAVRTOOLCHAINFORWINDOWS.aspx) auf einem 
Windows 8.1 64bit Rechner mit einem USBasp installiert. Der ATmega8-16PU 
und Atmel Studoe 6 kommunizieren über USBBasp ohne Probleme. Das habe 
ich getestet. Ich habe auch ein anderes LED Test Programm mühelos auf 
den ATmega8-16PU geladen und zur Funktion auf einem Breadboard gebracht.

Leider gelingt es mir nicht mit Studio 6 dieses Programm 
(http://daduke.org/dl/nixie/avrledtest.c) zu kompilieren und auf den 
ATmega8-16PU zu laden. Ständig kommen Fehlermeldungen wie Datei oder 
Verzeichnis nicht vorhanden, obwohl ja Studio 6 mit allen Updates etc. 
installiert ist.

Was mache ich falsch?

Sollte ich eine andere Software nutzen?

Kann mir jemand Tips geben, wie ich dieses Programm auf den ATmega8-16PU 
laden kann?

Danke!!!

avr-noob

: Bearbeitet durch User
von Peter II (Gast)


Lesenswert?

Avr N. schrieb:
> Was mache ich falsch?

das du uns nicht die Fehlermeldung zeigst.

von Avr N. (avr-noob)


Lesenswert?

Ok, kommt heute Nachmittag mit allen Details...

von Avr N. (avr-noob)


Angehängte Dateien:

Lesenswert?

Ok, hier nun die Fehlermeldungen. AVRDUDE ist unter den External Tools 
zum flashen installiert.

Programm:

*  nixie.c
 *
 *  DCF77 radio controlled Nixie clock software
 *  for Atmel 4433 or mega8 microcontrollers
 *
 *  (c) 2003 by daduke <daduke@daduke.org>
 *
 *  GPL license - use at your own risk
 */

//#include <iom8.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/signal.h>

volatile void out2(uint8_t group, uint8_t value);  //output 2 digits
volatile void out1(uint8_t digit, uint8_t value);  //output 1 digit

volatile uint8_t ictr, bitctr, date, newsec, first15;
volatile uint8_t sec, min, hour, day, mon, year, lmin, lhour;
volatile uint8_t bit, dcf_in, last_one, duration, time_ready;
volatile uint16_t dctr;

volatile uint8_t bits[38];    //hilarious waste of memory, but wtf...


//SIGNAL (SIG_OVERFLOW0)  //generates 250 interrupts/sec
SIGNAL(SIG_OUTPUT_COMPARE1A) {
//  outp(0,TCNT0);    /* reload timer with initial value */

  if (++ictr==250) {  //if one second has passed
    ictr = 0;  //reset

    if (++sec==60) {  //new minute
      sec = 0;    //inc sec and reset if 60
      if (++min==60) {
        min = 0;
        if (++hour==24) {
          hour = 0;
        }
      }
    }
    newsec = 1;
  }
  dctr++;  //inc pulse length counter


  dcf_in = (uint8_t)bit_is_clear(PINB,1);  //probe DCF signal
  if (dcf_in) {    //DCF input is high
        if (!last_one) {  //beginning of a pulse
            if (dctr > 450 && dctr < 550) {    //one pulse was missing 
-> new minute
              ictr = 0;      //reset interrupt counter: new sec starts 
NOW
              sec = 0;        //and it's the first
              bitctr = 0;      //reset bit counter
              first15 = 0;    //the first 15 bits in the DCF signal are 
0, and we use them as a sort of quality indicator
             }
             dctr = 0;  //reset pulse length counter

        }
  } else {        //DCF is low
        if (last_one) {    //a pulse just ended
             duration = dctr;    //length = # ticks
             if (duration > 19 && duration < 31) {    //we got a low
                  bit = 1;
             } else if (duration > 44 && duration < 56) {  //got a hi
                  bit = 2;
             } else bit = 0;  //something else -> bad signal?
             if (bit) {      //for hi or low
                  if (bitctr < 15 && bit == 1) {  //sum up the first 15 
bits
                    first15++;
                  } else if (bitctr > 20 && bitctr < 59) {    //store 
the bit
                    bits[bitctr-21] = bit-1;
                  }
                  bitctr++;    //inc bit counter
             }
        }
  }
  if ((first15 == 15) && (bitctr == 58)) {    //if all bits are received 
and the first 15 were 0
        time_ready = 1;  //we can compute and update the time
        first15 = 0;
  }
  last_one = dcf_in;    //store the state of the DCF signal for the next 
iteration

//  if ((hour == 0) && (min == 2) && (sec == 35)) { cbi(PORTC, 3); 
sbi(PORTB, PB0); }  //trigger the DCF77 receiver 2 min after midnight
//  if ((hour == 0) && (min == 2) && (sec == 45)) cbi(PORTB, PB0);


}


volatile int main( void )
{
  outp(0xFF,DDRD);    /* use all pins on PORTD for output: 2xBCD */
  outp(0x0F,DDRC);    /* use lower 4 pins on PORTC for output: latch 
select + HV control */
  outp(0x01,DDRB);    /* use lowest pin on PORTB for output: sync DCF77 
*/

//  outp((1<<TOIE0),TIMSK); /* enables the T/C0 overflow interrupt in 
the T/C interrupt mask register for */
//  outp(0,TCNT0);    /* start value of T/C0 */
//  outp(3,TCCR0);    /* prescale clk/64 */
//  sbi(TWCR, TWEN);  //enable I2C for temp sensor

  TIMSK = _BV(OCIE1A);
  TCCR1B = _BV(CS12)    // 256 prescale
         | _BV(WGM12);  // CTC mode, TOP = OCR1A
  OCR1A = 63;        // count up to TOP 1Hz with 4.096 meg system clock


  sbi(PORTC, 3);    //turn on HV supply

  sbi(PORTC, 1);
  outp(255,PORTD);
  cbi(PORTC, 1);
  for (ictr=0; ictr<10; ictr++) {  //power-on tube test, counting 0..9 
and back
    for (bitctr=0; bitctr<6; bitctr++) {
          out1(bitctr, ictr);
          for (dctr=0; dctr<20000; dctr++) sec++;
    }
  }
/*  for (ictr=8; ictr=2; ictr--) {
    for (bitctr=0; bitctr<6; bitctr++) {
          out1(bitctr, ictr);
          for (dctr=0; dctr<20000; dctr++) sec++;
    }
  } */

  for (ictr = 0; ictr < 37; ictr++) bits[ictr] = 0;    //set all bits to 
0
  sec = dctr = ictr = bitctr = last_one = time_ready = 0;
  first15 = 0;

  sei();    /* set global interrupt enable */

  while(1) {
    if (time_ready) {    //compute and update time
      lmin = bits[0] + (bits[1]<<1) + (bits[2]<<2) + (bits[3]<<3)
           + ( bits[4] + (bits[5]<<1) + (bits[6]<<2))*10;
      lhour = bits[8] + (bits[9]<<1) + (bits[10]<<2) + (bits[11]<<3)
           + ( bits[12] + (bits[13]<<1))*10;
      day = bits[15] + (bits[16]<<1) + (bits[17]<<2) + (bits[18]<<3)
           + ( bits[19] + (bits[20]<<1))*10;
      mon = bits[24] + (bits[25]<<1) + (bits[26]<<2) + (bits[27]<<3)
           + bits[28]*10;
      year = bits[29] + (bits[30]<<1) + (bits[31]<<2) + (bits[32]<<3)
           + ( bits[33] + (bits[34]<<1) + (bits[35]<<2) + 
(bits[36]<<3))*10;
      hour = lhour;
      min = lmin - 1;
      time_ready = 0;
    }
    if (newsec) {
      date = (sec > 30 && sec < 35 && min % 2);  //show the date every 
odd minute for some seconds
        if (!date) {
            out2(2, hour);
            out2(1, min);
            out2(0, sec);
        } else {
            out2(2, day);
            out2(1, mon);
            out2(0, year);
        }
      newsec = 0;
    }
  }
}

volatile void out2(uint8_t group, uint8_t value) {
  uint8_t byte;

  if (group == 2 && value < 10) byte = (uint8_t)(10<<4) + 
(uint8_t)(value % 10); else    //leading zero suppression
        byte = (uint8_t)((value / 10)<<4) + (uint8_t)(value % 10);
  sbi(PORTC, group);
  outp(byte,PORTD);
  cbi(PORTC, group);
}

volatile void out1(uint8_t digit, uint8_t value) {
  uint8_t byte, group;

  group = 2 - (uint8_t)(digit / 2);
  if (!(digit %  2)) {
        byte = (uint8_t)(value<<4) + (uint8_t)(11);
  } else {
        byte = (uint8_t)(10<<4) + (uint8_t)(value);
  }
  sbi(PORTC, (group+1) % 3);
  outp(255,PORTD);
  cbi(PORTC, (group+1) % 3);
  sbi(PORTC, group);
  outp(byte,PORTD);
  cbi(PORTC, group);
}


Error List:

Warning  1  #warning "This header file is obsolete.  Use 
<avr/interrupt.h>." [-Wcpp]  c:\program files (x86)\atmel\atmel 
toolchain\avr8 
gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\avr\signal.h  36  2 
ATMEGA-8-NIXIE-USBasp
Error  2  attempt to use poisoned "SIG_OUTPUT_COMPARE1A" 
C:\Users\DanielC\Documents\Atmel 
Studio\6.2\ATMEGA-8-NIXIE-USBasp\ATMEGA-8-NIXIE-USBasp\ATMEGA-8-NIXIE-US 
Basp.cpp   28  8  ATMEGA-8-NIXIE-USBasp
Warning  3  'SIG_OUTPUT_COMPARE1A' appears to be a misspelled signal 
handler [enabled by default]  C:\Users\DanielC\Documents\Atmel 
Studio\6.2\ATMEGA-8-NIXIE-USBasp\ATMEGA-8-NIXIE-USBasp\ATMEGA-8-NIXIE-US 
Basp.cpp   28  8  ATMEGA-8-NIXIE-USBasp
Error  4  '::main' must return 'int'  C:\Users\DanielC\Documents\Atmel 
Studio\6.2\ATMEGA-8-NIXIE-USBasp\ATMEGA-8-NIXIE-USBasp\ATMEGA-8-NIXIE-US 
Basp.cpp   91  25  ATMEGA-8-NIXIE-USBasp
Error  5  'outp' was not declared in this scope 
C:\Users\DanielC\Documents\Atmel 
Studio\6.2\ATMEGA-8-NIXIE-USBasp\ATMEGA-8-NIXIE-USBasp\ATMEGA-8-NIXIE-US 
Basp.cpp   93  16  ATMEGA-8-NIXIE-USBasp
Error  6  'sbi' was not declared in this scope 
C:\Users\DanielC\Documents\Atmel 
Studio\6.2\ATMEGA-8-NIXIE-USBasp\ATMEGA-8-NIXIE-USBasp\ATMEGA-8-NIXIE-US 
Basp.cpp   108  14  ATMEGA-8-NIXIE-USBasp
Error  7  'cbi' was not declared in this scope 
C:\Users\DanielC\Documents\Atmel 
Studio\6.2\ATMEGA-8-NIXIE-USBasp\ATMEGA-8-NIXIE-USBasp\ATMEGA-8-NIXIE-US 
Basp.cpp   112  14  ATMEGA-8-NIXIE-USBasp
Error  8  'sbi' was not declared in this scope 
C:\Users\DanielC\Documents\Atmel 
Studio\6.2\ATMEGA-8-NIXIE-USBasp\ATMEGA-8-NIXIE-USBasp\ATMEGA-8-NIXIE-US 
Basp.cpp   169  18  ATMEGA-8-NIXIE-USBasp
Error  9  'outp' was not declared in this scope 
C:\Users\DanielC\Documents\Atmel 
Studio\6.2\ATMEGA-8-NIXIE-USBasp\ATMEGA-8-NIXIE-USBasp\ATMEGA-8-NIXIE-US 
Basp.cpp   170  17  ATMEGA-8-NIXIE-USBasp
Error  10  'cbi' was not declared in this scope 
C:\Users\DanielC\Documents\Atmel 
Studio\6.2\ATMEGA-8-NIXIE-USBasp\ATMEGA-8-NIXIE-USBasp\ATMEGA-8-NIXIE-US 
Basp.cpp   171  18  ATMEGA-8-NIXIE-USBasp
Error  11  'sbi' was not declared in this scope 
C:\Users\DanielC\Documents\Atmel 
Studio\6.2\ATMEGA-8-NIXIE-USBasp\ATMEGA-8-NIXIE-USBasp\ATMEGA-8-NIXIE-US 
Basp.cpp   183  26  ATMEGA-8-NIXIE-USBasp
Error  12  'outp' was not declared in this scope 
C:\Users\DanielC\Documents\Atmel 
Studio\6.2\ATMEGA-8-NIXIE-USBasp\ATMEGA-8-NIXIE-USBasp\ATMEGA-8-NIXIE-US 
Basp.cpp   184  16  ATMEGA-8-NIXIE-USBasp
Error  13  'cbi' was not declared in this scope 
C:\Users\DanielC\Documents\Atmel 
Studio\6.2\ATMEGA-8-NIXIE-USBasp\ATMEGA-8-NIXIE-USBasp\ATMEGA-8-NIXIE-US 
Basp.cpp   185  26  ATMEGA-8-NIXIE-USBasp


Output:

------ Build started: Project: ATMEGA-8-NIXIE-USBasp, Configuration: 
Debug AVR ------
Build started.
Project "ATMEGA-8-NIXIE-USBasp.cppproj" (default targets):
Target "PreBuildEvent" skipped, due to false condition; 
('$(PreBuildEvent)'!='') was evaluated as (''!='').
Target "CoreBuild" in file "C:\Program Files (x86)\Atmel\Atmel Studio 
6.2\Vs\Compiler.targets" from project "C:\Users\DanielC\Documents\Atmel 
Studio\6.2\ATMEGA-8-NIXIE-USBasp\ATMEGA-8-NIXIE-USBasp\ATMEGA-8-NIXIE-US 
Basp.cppproj"  (target "Build" depends on it):
  Using "RunCompilerTask" task from assembly "C:\Program Files 
(x86)\Atmel\Atmel Studio 6.2\Extensions\Application\AvrGCC.dll".
  Task "RunCompilerTask"
    Shell Utils Path C:\Program Files (x86)\Atmel\Atmel Studio 
6.2\shellUtils
    C:\Program Files (x86)\Atmel\Atmel Studio 6.2\shellUtils\make.exe 
all
    Building file: .././ATMEGA-8-NIXIE-USBasp.cpp
    Invoking: AVR8/GNU C Compiler : 4.8.1
    "C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 
GCC\Native\3.4.1056\avr8-gnu-toolchain\bin\avr-g++.exe" -funsigned-char 
-funsigned-bitfields -DDEBUG  -O1 -ffunction-sections -fdata-sections 
-fpack-struct -fshort-enums -g2 -Wall -mmcu=atmega8 -c -MD -MP -MF 
"ATMEGA-8-NIXIE-USBasp.d" -MT"ATMEGA-8-NIXIE-USBasp.d" 
-MT"ATMEGA-8-NIXIE-USBasp.o"   -o "ATMEGA-8-NIXIE-USBasp.o" 
".././ATMEGA-8-NIXIE-USBasp.cpp"
    In file included from .././ATMEGA-8-NIXIE-USBasp.cpp:14:0:
c:\program files (x86)\atmel\atmel toolchain\avr8 
gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\avr\signal.h(36,2): 
warning: #warning "This header file is obsolete.  Use 
<avr/interrupt.h>." [-Wcpp]
     #warning "This header file is obsolete.  Use <avr/interrupt.h>."
      ^
C:\Users\DanielC\Documents\Atmel 
Studio\6.2\ATMEGA-8-NIXIE-USBasp\ATMEGA-8-NIXIE-USBasp\ATMEGA-8-NIXIE-US 
Basp.cpp(28,8):  error: attempt to use poisoned "SIG_OUTPUT_COMPARE1A"
     SIGNAL(SIG_OUTPUT_COMPARE1A) {
            ^
    In file included from .././ATMEGA-8-NIXIE-USBasp.cpp:13:0:
    .././ATMEGA-8-NIXIE-USBasp.cpp: In function 'void 
SIG_OUTPUT_COMPARE1A()':
C:\Users\DanielC\Documents\Atmel 
Studio\6.2\ATMEGA-8-NIXIE-USBasp\ATMEGA-8-NIXIE-USBasp\ATMEGA-8-NIXIE-US 
Basp.cpp(28,8):  warning: 'SIG_OUTPUT_COMPARE1A' appears to be a 
misspelled signal handler [enabled by default]
     SIGNAL(SIG_OUTPUT_COMPARE1A) {
            ^
    .././ATMEGA-8-NIXIE-USBasp.cpp: At global scope:
C:\Users\DanielC\Documents\Atmel 
Studio\6.2\ATMEGA-8-NIXIE-USBasp\ATMEGA-8-NIXIE-USBasp\ATMEGA-8-NIXIE-US 
Basp.cpp(91,25):  error: '::main' must return 'int'
     volatile int main( void )
                             ^
    .././ATMEGA-8-NIXIE-USBasp.cpp: In function 'int main()':
C:\Users\DanielC\Documents\Atmel 
Studio\6.2\ATMEGA-8-NIXIE-USBasp\ATMEGA-8-NIXIE-USBasp\ATMEGA-8-NIXIE-US 
Basp.cpp(93,16):  error: 'outp' was not declared in this scope
      outp(0xFF,DDRD);    /* use all pins on PORTD for output: 2xBCD */
                    ^
C:\Users\DanielC\Documents\Atmel 
Studio\6.2\ATMEGA-8-NIXIE-USBasp\ATMEGA-8-NIXIE-USBasp\ATMEGA-8-NIXIE-US 
Basp.cpp(108,14):  error: 'sbi' was not declared in this scope
      sbi(PORTC, 3);  //turn on HV supply
                  ^
C:\Users\DanielC\Documents\Atmel 
Studio\6.2\ATMEGA-8-NIXIE-USBasp\ATMEGA-8-NIXIE-USBasp\ATMEGA-8-NIXIE-US 
Basp.cpp(112,14):  error: 'cbi' was not declared in this scope
      cbi(PORTC, 1);
                  ^
    .././ATMEGA-8-NIXIE-USBasp.cpp: In function 'volatile void 
out2(uint8_t, uint8_t)':
C:\Users\DanielC\Documents\Atmel 
Studio\6.2\ATMEGA-8-NIXIE-USBasp\ATMEGA-8-NIXIE-USBasp\ATMEGA-8-NIXIE-US 
Basp.cpp(169,18):  error: 'sbi' was not declared in this scope
      sbi(PORTC, group);
                      ^
C:\Users\DanielC\Documents\Atmel 
Studio\6.2\ATMEGA-8-NIXIE-USBasp\ATMEGA-8-NIXIE-USBasp\ATMEGA-8-NIXIE-US 
Basp.cpp(170,17):  error: 'outp' was not declared in this scope
      outp(byte,PORTD);
                     ^
C:\Users\DanielC\Documents\Atmel 
Studio\6.2\ATMEGA-8-NIXIE-USBasp\ATMEGA-8-NIXIE-USBasp\ATMEGA-8-NIXIE-US 
Basp.cpp(171,18):  error: 'cbi' was not declared in this scope
      cbi(PORTC, group);
                      ^
    .././ATMEGA-8-NIXIE-USBasp.cpp: In function 'volatile void 
out1(uint8_t, uint8_t)':
C:\Users\DanielC\Documents\Atmel 
Studio\6.2\ATMEGA-8-NIXIE-USBasp\ATMEGA-8-NIXIE-USBasp\ATMEGA-8-NIXIE-US 
Basp.cpp(183,26):  error: 'sbi' was not declared in this scope
      sbi(PORTC, (group+1) % 3);
                              ^
C:\Users\DanielC\Documents\Atmel 
Studio\6.2\ATMEGA-8-NIXIE-USBasp\ATMEGA-8-NIXIE-USBasp\ATMEGA-8-NIXIE-US 
Basp.cpp(184,16):  error: 'outp' was not declared in this scope
      outp(255,PORTD);
                    ^
C:\Users\DanielC\Documents\Atmel 
Studio\6.2\ATMEGA-8-NIXIE-USBasp\ATMEGA-8-NIXIE-USBasp\ATMEGA-8-NIXIE-US 
Basp.cpp(185,26):  error: 'cbi' was not declared in this scope
      cbi(PORTC, (group+1) % 3);
                              ^
    make: *** [ATMEGA-8-NIXIE-USBasp.o] Error 1
  Done executing task "RunCompilerTask" -- FAILED.
Done building target "CoreBuild" in project 
"ATMEGA-8-NIXIE-USBasp.cppproj" -- FAILED.
Done building project "ATMEGA-8-NIXIE-USBasp.cppproj" -- FAILED.

Build FAILED.
========== Build: 0 succeeded or up-to-date, 1 failed, 0 skipped 
==========

von Klaus (Gast)


Lesenswert?

Du bist keine "Anfänger" sondern ein "Kunde". Und die bezahlen Geld, 
dafür dass ihnen jemand etwas erledigt, was sie selbst nicht können oder 
verstehen.

Ein Anfänger, fängt an, in dem er sich mit Mathematik, Physik, 
Elektrotechnik etc. beschäftigt. Dann bastelt er mit Widerständen, 
Kondensatoren und Transistoren - später mit ICs. Dann liest er mal so 
allerhand Zeugs über uCs und uPs und über das Programmieren und über 
Programmiersprachen. Dann kauft er so ein Ding und fängt an mit dem 
Versuch, eine LED blinken zu lassen.
Das ist ein Anfänger.

Danke für die Beachtung aller Sicherheitsmaßnahmen.

P.S. Und fang jetzt nicht an uns zu erzählen, wie der, das eigentlich 
machen sollte, was Du jetzt tust, in einen Sauerstofftank gesprungen 
ist.

von Avr N. (avr-noob)


Lesenswert?

Klaus (Gast):

so eine bösartige Antwort und Unterstellung hätte ich in einem Forum 
nicht erwartet.

Wenn Du meinen ersten Post gelesen hättest, wüßtest Du, daß ich bereits 
ein LED Progranmm erfolgreich kompiliert und in den Chip geladen habe. 
Die LED hat geblinkt auf dem Breadboard. Damit habe ich also bereits 
etabliert, daß AVR Studio 6, AVRDUDE und USBasp funktionieren.

Wenn Du mir nicht helfen willst, dann frag' doch bitte nicht 
scheinheilig nach den Fehlermeldungen.

Laß' Deinen Lebens- oder Berufsfrust woanderns aus, aber nicht an mir 
oder in einem Internetforum.

avr-noob

von Stromverdichter (Gast)


Lesenswert?

Hallo avr-noob,
wieso verwendest du eine andere Toolchain?
Offensichtlich kannst du kein C und willst einen Waschzettel zum 
abtippen, um deine Nixi zu bauen. Die meisten hier haben aber keine Lust 
zu arbeiten, sondern sind einfach nur hilfsbereit bei Fragen.
Du hast eine Backanleitung von Guido, also kompiliere dein Programm mit 
der Original-toolchain, dann geht das auch.
btw. du solltest seinen Artikel komplett lesen, dann würden dir viele 
Fehler deines Programmes selbst auffallen.

P.s. jede toolchain hat seine Eigenheiten, Code ist selten einfach ohne 
Anpassung auf allen compilern compilierbar, die Sprachen entwickeln sich 
eben, genauso die toolchains.

von Tom (Gast)


Lesenswert?

1. Die Pöbler ignorieren
2. Die Makros für cbi outp sbi nachrüsten: 
Beitrag "Re: sbi cbi  inp / outp im neuen WinAVR- workaround"
3. Das bemängelte Include rauswerfen.
4. die Altlasten rauswerfen (ggf volatile Funktionen, main muss int 
returnen)
5. C lernen
6. Den gruseligen Code nicht zum Vorbild nehmen. Man kann offensichtlich 
Assembler in jeder Sprache schreiben.

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Tom schrieb:
> Den gruseligen Code nicht zum Vorbild nehmen.

ACK.

@ avr-noob.

Du verwenderst eine zu neue (Version der) avr-gcc Toolchain. 
Dementsprechend gibt es 4 Lösungen für dein Problem:

1) Eine ältere Toolchain besorgen, z.b. WinAVR-20100110:

http://sourceforge.net/projects/winavr/  -->  Files  -->  WinAVR.

Bei der Installation den Haken für "Change PATH Variable" deaktivieren 
und den Compiler per (absolutem) Pfad aufrufen.  So kannst du deine 
vorhandene, neue avr-gcc Installation ungeändert für andere Projekte 
weiter verwenden.


2) Die Firmware auf eine neuere Version von avr-gcc + AVR-LibC 
forwärts-portieren.  Die meisten Hinweise, wie das zu geschehen hat, 
sind den Warnungen und Fehlermeldungen sowie der AVR-Libc-Doku zu 
entnehmen.  Den Rest an Info liefert die Allwissende Müllhalde.


3) Andere, weniger gruselige Firmware suchen.


4) Firmware selber schreiben; je nach Gusto mehr oder weniger gruselig 
als die Vorlage ;-)

von Klaus (Gast)


Lesenswert?

Avr N. schrieb:
> Klaus (Gast):
>
> so eine bösartige Antwort

Bösartig? Das kann ich nicht finden. Hast Du da ein Zitat an dem das 
erkennbar ist?

> und Unterstellung hätte ich in einem Forum
Welche Unterstellung? Hast Du da ein Zitat in dem ich etwas unterstelle?
Ich bin von den Informationen ausgegangen, die Du selbst gegeben hast.

> nicht erwartet.
>
> Wenn Du meinen ersten Post gelesen hättest, wüßtest Du, daß ich bereits
> ein LED Progranmm erfolgreich kompiliert und in den Chip geladen habe.

Das mag so sein. Aber Du hast es nicht selbst geschrieben. Andernfalls 
wären die Fehlermeldungen auch nicht rätselhaft. Code irgendwo her 
kopieren ist keine Kunst - erfordert keine besonderen Kenntnisse.

> Die LED hat geblinkt auf dem Breadboard. Damit habe ich also bereits
> etabliert, daß AVR Studio 6, AVRDUDE und USBasp funktionieren.
>
> Wenn Du mir nicht helfen willst, dann frag' doch bitte nicht
> scheinheilig nach den Fehlermeldungen.
Ich habe nicht nach Fehlermeldungen gefragt. Schon gar nicht 
scheinheilig. Hast Du da ein Zitat in dem ich nach Fehlermeldungen 
gefragt habe?

> Laß' Deinen Lebens- oder Berufsfrust woanderns aus, aber nicht an mir
> oder in einem Internetforum.

Das nun ist eine Unterstellung.

von Avr N. (avr-noob)


Lesenswert?

Danke an Stromverdichter (Gast), Tom (Gast) und  Johann L. (gjlayde), 
für die konstruktiven Hinweise. Wenn ich nur was zusammenlöten wollte, 
hätte ich ein Multiplex Nixie Kit kaufen können. Für mich ist das Bauen 
ein Lernprozeß und ja, ich bin kein Informatiker oder versierter (C) 
Programmierer.

von Kai M. (kai_mauer)


Lesenswert?

Klaus schrieb:
> Bösartig? Das kann ich nicht finden.

Klar kannst Du das nicht finden, weil Du Nichts mehr merkst.
Klapperschädel...

Klaus schrieb:
> Das nun ist eine Unterstellung.

Du bist ein Schmierlappen -und das ist keine Unterstellung, das ist eine 
Feststellung.

von Klaus (Gast)


Lesenswert?

Avr N. schrieb:
> Danke an Stromverdichter (Gast), Tom (Gast) und  Johann L. (gjlayde),
> für die konstruktiven Hinweise. Wenn ich nur was zusammenlöten wollte,
> hätte ich ein Multiplex Nixie Kit kaufen können.

Das ist Rhetorik und keine Erklärung. Das selbe würde für zwei 
Kupferrohre gelten. Eine eigentliche Erklärung bezöge sich auf die 
gegebene Situation und nicht darauf, was Du hättest sonst tun können. 
Und diese Erklärung hätte im ersten Posting (oder spätestens nach meinem 
Kommentar) kommen sollen.

> Für mich ist das Bauen ein Lernprozeß

Dieser Ansatz ist durchaus sinnvoll. Aber wenn das "bauen" erfordert, 
dass Du eine Programm kompilierst - ohne C-Kenntnisse - dann fängst Du 
mit einem uC Projekt am falschen Ende an. Würde ich aber unterstellen, 
dass Du intelligent genug bist, das zu begreifen, dann bliebe wiederum 
nur, dass Du mehr am Ergebnis - einer Nixie-Uhr - interessiert bist, als 
daran, etwas zu lernen.


> und ja, ich bin kein Informatiker oder versierter (C) Programmierer.

Das ist wiederum Rhetorik, mit der Du mir Schuldgefühle verpassen 
willst.

Mein Urteil ist sachlich gewesen und begründet. Deine Reaktion eher 
beleidigt und unsachlich. Die Beleidigung täte mir leid, falls ich sie 
in dem Moment des Schreibens beabsichtigt hätte; falls sie aus Deiner 
Sicht tatsächlich vorläge, suggerierte das aber, dass "Kunden", 
irgendwie minderwertig wären. Ist Dir das klar?

Falls überhaupt eine Beleidigung vorläge, dann die das ein Kunde unter 
dem Deckmantel des Interesses von Enthusiasten Probleme gelöst haben 
will, die das Erreichen des Resultats verhindern.

Ich bin da streng - das will ich einräumen -, aber es gibt für meinen 
Geschmack zu viele Leute hier, die so etwas versuchen.

Du meldest Dich hier an und stellst als Erstes eine Frage nach 
Problemen mit Code der offensichtlich nicht von Dir stammt. Die Art der 
Probleme verweist darauf, dass Du nicht mal eine leise Idee hast, was 
die Ursache sein könnte, obwohl ein Anfänger, der solch ein Projekt 
versucht sinnvollerweise wenigstens irgendeine darüber Intuition haben 
sollte.
Das sind ganz klare Anzeichen, die Du nicht einmal zu relativieren 
versucht hast.

von Kai M. (kai_mauer)


Lesenswert?

@Avr Noob

Ich bitte Dich inständig, nicht auf "Klaus" einzugehen. Der liest zu 
gerne seine eigenen Texte. Solche Leute sind wie die Exkremente von 
Hunden am Schuh: Penetrant und nur mit großer Mühe wieder loszuwerden.

von Frank L. (frank_l)


Lesenswert?

Hallo,

kleine kurze Hilfe:

1. die Zeile #include <avr/signal.h> durch #include <avr/interrupt.h> 
ersetzen.

2. die Macros

#define sbi(ADDRESS,BIT) (ADDRESS |= (1<<BIT))
#define cbi(ADDRESS,BIT) (ADDRESS &= ~(1<<BIT))
#define outp(VAL,ADRESS) ADRESS=VAL

in Deinen Quellcode unterhalb der includes einfügen.

Den Namen des Interruptvektors Signal(SIG_OUTPUT_COMPARE1A) durch 
ISR(TIM1_COMPA_vect) ersetzen.

Dann sollten die Fehlermeldung die ich jetzt sehen kann schon mal weg 
sein.

Gruß
Frank

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.