Forum: Compiler & IDEs Atmel Studio 7.0 einbinden von avr/io.h klappt nicht


von Kennis B. (kennis_b)


Lesenswert?

Hallo an Alle :)

ich benutze Windows 10 und einen Atmega8 16-PU mit einem ISP Programmer 
der als STK500 Programmer erkannt wird. Die Übertragung funktioniert 
soweit auch.

ich habe "normal" die Bib avr/io.h eingebunden (code folgt) zudem habe 
ich delay.h eingebunden. wenn ich auf delay.h klicke zeigt er mir oben 
in der Leiste den ganzen Pfad an, bei io.h tut er es nicht, zudem kann 
ich mit "goto Implementation" nicht zu der Bib kommen.
ich denke das sie so in Wirklichkeit garnicht eingebunden ist und habe 
dann immer avr/iom8.h extra nochmal eingebunden.

(habe geprüfugt ob die datein alle existieren und das tun sie)

habe nun gesehen das in der VA View neben io.h (unresolved) steht
nach etwas suche habe ich dieses hier gefunden:

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Mor Shuk wrote on Fri, 13 April 2012 01:50

is there any chance you could give me a more detailed intruction on how 
to do this?! cause im trying and jut cant get it done...(working eclipse 
on ubuntu 11.10)

- Open Project Properties->C/C++ Build->Environment
- click Select.. and choose LANG
- use empty value for LANG
- repeat above step for LANGUAGE
- repeat above step for LC_ALL but use the value en_GB.UTF-8

Rebuild project and index
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

ich verstehe aber nicht wirklich was ich tun soll? es scheint ja die 
sprache irgendwie falsch eingstellt zu sein... meinen die einen ordner 
im explorer oder ist das im atmel studio zu ändern? jemand schon 
erfahrung hiermit gemacht ?

(ich bin etechnik student im 2ten Semester wir haben leider 
Mikrokontroller noch nicht behandelt :D )
Vielen Dank und Liebe Grüße

: Verschoben durch Moderator
von Peter II (Gast)


Lesenswert?

Hast du denn einen Prozessor ausgewählt?

io.h verzweigt auf die verschieden Prozessoren, dafür muss er aber 
bekannt sein.

von Kennis B. (kennis_b)


Lesenswert?

Beim Start des Projektes habe ich Atmega8 ausgewählt.
kann man denn irgendwie prüfen ob das richtig geklappt hat?

von Peter II (Gast)


Lesenswert?

Kennis B. schrieb:
> Beim Start des Projektes habe ich Atmega8 ausgewählt.
> kann man denn irgendwie prüfen ob das richtig geklappt hat?

schreibe doch einfach mal eine kleine Blink-Programm.

von Kennis B. (kennis_b)


Lesenswert?

also ich hatte folgendes Programm geschrieben das so auch funktionierte:

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
/*
 * Test1.c
 *
 * Created: 22.08.2016 21:54:36
 * Author : kennis
 */
#define F_CPU 1000000UL
#include <avr/io.h>
//#include <C:/Program Files 
(x86)/Atmel/Studio/7.0/toolchain/avr8/avr8-gnu-toolchain/avr/include/avr 
/io.h>
#include <stdint.h>  // Standard Datentypen einbinden
#include <kennis.h>  // funktion Siebensegment
#include <util/delay.h>
#include <avr/interrupt.h>

uint8_t isa;
uint8_t zeitzaehler = 0;
uint8_t zeitzaehler2 = 0;

int main(void)
{

  DDRD = (1 << DDD0) | (1 << DDD1) | (1 << DDD2) | (1 << DDD3) | (1 << 
DDD4) | (1 << DDD5) | (1 << DDD6) | (1 << DDD7);



  PORTC = (1 << DDC6) | (1 << DDC5) | (1 << DDC4) | (1 << DDC3) | (1 << 
DDC2);
        // Alle Eingänge am PortC mit PullUp Widerstand schalten


  TCCR0 = (1<<CS02);

  // Overflow Interrupt erlauben
  TIMSK |= (1<<TOIE0);

  // Global Interrupts aktivieren
  sei();


    /* Replace with your application code */
    while (1)
    {
    if (zeitzaehler>10)
    {
      zeitzaehler2++;
      zeitzaehler = 0;
    }
    if(zeitzaehler2>9) zeitzaehler2=0;
    isa = zeitzaehler2;
    PORTD = siebensegment(isa);

  }



  }

  ISR (TIMER0_OVF_vect)
  {
    zeitzaehler++;

  }
 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

Hier hatte ich nun delay.h nicht benutzt. delay.h funktionierte nämlich 
leider nicht. ich habe da den Zusammenhang zu der fehlenden 
Initialisierung von io.h gezogen

von Peter II (Gast)


Lesenswert?

Kennis B. schrieb:
> Hier hatte ich nun delay.h nicht benutzt. delay.h funktionierte nämlich
> leider nicht.

und was funktioniert da nicht?

von Kennis B. (kennis_b)


Lesenswert?

die funktion _delay_ms hat nichts gemacht das programm ist da einfach 
gestoppt und ging nicht weiter... obwohl die F_CPU definiert war.

ist es denn normal das er bei io.h den Pfad nicht anzeigt?

von Peter II (Gast)


Lesenswert?

Kennis B. schrieb:
> die funktion _delay_ms hat nichts gemacht das programm ist da einfach
> gestoppt und ging nicht weiter... obwohl die F_CPU definiert war.
merkwürdig, gab es eine Warnung beim build?

> ist es denn normal das er bei io.h den Pfad nicht anzeigt?
keine Ahnung, hat mich noch nie interessiert. Sollte aber keine Rolle 
spielen, weil das nur das Studio betrifft.

von Peter II (Gast)


Lesenswert?

Kennis B. schrieb:
> die funktion _delay_ms hat nichts gemacht das programm ist da einfach
> gestoppt und ging nicht weiter... obwohl die F_CPU definiert war.

Nachtrag:

Hast du wirklich lange genug gewartet? Die Simulation ist nicht in 
Echtzeit. Und wenn du keine Optimierung aktiviert hast dauert es noch 
länger.

von Kennis B. (kennis_b)


Lesenswert?

leider gab es weder eine Fehler noch eine Warn meldung

Nachtrag:
habe nun mal folgenden code getestet:

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
/*
 * 16bit timer.c
 *
 * Created: 19.09.2016 12:34:36
 * Author : kennis
 */

#define F_CPU 1000000UL
#include <avr/io.h>
#include <kennis.h>  // funktion Siebensegment
#include <util/delay.h>

int main(void)
{

DDRD = (1 << DDD0) | (1 << DDD1) | (1 << DDD2) | (1 << DDD3) |  (1 << 
DDD4) | (1 << DDD5) | (1 << DDD6) | (1 << DDD7);



PORTC = (1 << DDC6) | (1 << DDC5) | (1 << DDC4) | (1 << DDC3) | (1 << 
DDC2);
        // Alle Eingänge am PortC mit PullUp   Widerstand schalten

  while(1)
  {
    PORTD = 0xff;
    _delay_ms(1000);
    PORTD = 0x00;
  }

}


<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

das müsste doch funktionieren oder nicht?

Nachtrag Nachtrag: alle Leds gehen an und nicht wieder aus am Port D

: Bearbeitet durch User
von Arduinoquäler (Gast)


Lesenswert?

Kennis B. schrieb:
> das müsste doch funktionieren oder nicht?

Versuch es doch mal so:
1
  while(1)
2
  {
3
    PORTD = 0xff;
4
    _delay_ms(1000);
5
    PORTD = 0x00;
6
    _delay_ms(1000);
7
  }

von Peter II (Gast)


Lesenswert?

Kennis B. schrieb:
> while(1)
>   {
>     PORTD = 0xff;
>     _delay_ms(1000);
>     PORTD = 0x00;
>   }

dann überlege mal was Genau passiert, oder kannst du µ-Sekunden mit dem 
Auge sehen?

von Kennis B. (kennis_b)


Lesenswert?

oh Gott peinlich:D das funktioniert nun, tut mir leid :D

ich finde es immer noch komisch das er mir den Pfad nicht anzeigt aber 
solange es funktioniert ist ja alles gut.
vielen Dank für eure schnelle Hilfe :)

(hatte in C programmierung nur ne 2,7 :D )

: Bearbeitet durch User
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.