www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Problemm mit Compiler?


Autor: Kaveh (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
Auf der Atmelseite habe ich ein Beispielcode für Steuerung eines Motor 
gefunden, das in C geschrieben ist aber mit dieser Meldung versehen ist 
:Code example in C language for IAR compiler. Ich habe diesen Compiler 
nicht.Mit AVR Studio habe ich versucht aber alles vergeblich. vielleicht 
mache ich etwas falsch .deswegen meine Frage: kann man es trotzdem 
irgendwie hinbekommen, dass dieses Programm mit AVR Studio simuliert 
wird? hier der Link zu der Atmelseite.

http://www.atmel.com/dyn/products/produ ... rt_id=4239

Danke
Kaveh

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> kann man es trotzdem irgendwie hinbekommen, dass dieses
> Programm mit AVR Studio simuliert wird?

Selbstverständlich. Man muss nur die IAR-spezifischen Dinge im Code 
anpassen, das dürfte primär die Art der Deklaration von 
Interruptroutinen betreffen.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kaveh schrieb:

> http://www.atmel.com/dyn/products/produ ... rt_id=4239

Den Link kannst du .... in die Tonne treten.

Poste ihn noch einmal, aber achte diesmal darauf, dass er vollständig 
ist.

Autor: Kaveh (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo nochmal,
hier der Link zu der Atmelseite, wo das Code in C zu finden ist.
unter Sowftware Files:

http://www.atmel.com/dyn/products/product_card.asp...

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ist eigentlich ziemlich unspektakuläres C.
Wie Rufus schon sagte: Da ist zunächst die Definition der Interrupt 
Service Funktionen. Das dürfte einer der Hauptbrocken sein. Der Rest 
sollte eigentlich so gut wie keine Probleme machen.

Im AVR Studio ein neues Projekt anfangen.
Dann alle Source Files in das Projekt einfügen.

Den Compiler darauf ansetzen und einen Fehler nach dem anderen 
durchgehen und die Syntax auf gcc anpassen. Ist vielleicht ein wenig 
Arbeit, allerdings nichts großartig kompliziertes.

Autor: Kaveh (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo ,
ich denke, ich muss es hier etwas ergänzen und zwar unter Software 
Files,
Code example for AT90PWM3 - PSC1 in 1 ramp mode
Code example in C language for IAR compiler
mfg
Kaveh
http://www.atmel.com/dyn/products/product_card.asp...

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ist egal. Alle Beispiele greifen ja sowieso auf den gleichen Grundstock 
an Funktionen zurück. Hast du den erst mal angepasst, ist der Rest so 
einfach wie einem Baby den Schnuller klaun.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
War nicht so schlimm.

Das Problem sind 2 Punkte
* Zum einen die ISR Syntax
* Der Interrupt Vektor heißt ein wenig anders. Lässt sich allerdings
  mit 'vergleichender Verhaltensforschung' leicht rauskriegen, wie das
  beim WinAVR heißen muss.
* Zum anderen, dass der ICC Code in mcu.h alles mitbekommt, was beim
  WinAVR durch die Wahl des Prozessors und
  #include <avr/io.h>
  geregelt wird.

In der mcu.h wird so gut wie alles auskommentiert, bzw mit einem
#ifdef _ICC_
...
#endif
ausgeblockt

Ein
#define  PLLOCK PLOCK
kommt unten noch ins File mit hinein, da es diese Konstanet beim WinAvr 
nicht gibt, sondern dort PLOCK heißt. Und damit ist dann schon fast 
alles andere auch geregelt

main.c sieht dann so aus.
//! @file psc_drv.c,v
//!
//! Copyright (c) 2004 Atmel.
//!
//! Please read file license.txt for copyright notice.
//!
//! @brief This file contains simple example for the PSC1
//!


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

#include "lib_mcu\compiler.h"
#include "lib_mcu\mcu.h"
#include "lib_mcu\psc\psc_drv.h"


ISR( PSC1_EC_vect )
{

PIND|=0x80;    // just to see that interrupt is alive !

}



int main()

{
   DDRD  |= 0xFF;
   PORTD |= 0xFF;

   // PSC is on 12 BIT from 0X0000 To 0x0FFF*

   OCR1SAH = 0x00;    OCR1SAL = 0X00;
   OCR1RAH = 0X05;    OCR1RAL = 0X00;
   OCR1SBH = 0X03;    OCR1SBL = 0X80;
   OCR1RBH = 0X0F;    OCR1RBL = 0Xff;


   Psc1_use_64_mega_pll_clock();  // Use PLL as clock at 64MHz

   Enable_both_psc1_outputs();   // Enable PSC1 output
   Psc1_outputs_active_high();   // PSC1 output active is High level
   Psc1_in_1_ramp_mode();        // PSC1 in one Ramp mode



   PIM1=0x01;                    // enable IT end of cycle PSC1
   SREG=0x80;                    // enable interrupt

   Start_psc1();                 // let's go

  while(1);
}

Dann bleibt nur noch ein Problem, weil sich Atmel entschieden hat 
'Funktionen' als Makros zu definieren. Zumindest mein WinAvr ist mit
Psc1_use_64_mega_pll_clock
nicht glücklich.
Ein Umarbeiten des Makros in psc_drv.h auf eine inline Funktion behebt 
das Problem allerdings ganz schnell
 ...

#define Psc1_use_io_clock()                           (PCNF1 &= ~(1<<PCLKSEL0) )
//! Start the PLL at 64MHz and connect it to PSC1


inline void Psc1_use_64_mega_pll_clock()
{
  Start_pll_64_mega();
  Wait_pll_ready();
  Psc1_use_pll_clock(); 
}


//! Start the PLL at 32MHz and connect it to PSC1
#define Psc1_use_32_mega_pll_clock()                                          \
          (Start_pll_32_mega(),                                               \

 ...


Damit compiliert und linkt das Projekt schon mal. Obs auch funktioniert, 
kann ich hier nicht testen.

Alles in allem eine Sache auf 15 Minuten, incl. Download

Ach ja, ein paar Include Pfade hab ich noch angepasst :-)

Autor: Kaveh (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo  Karl heinz Buchegger,
erstmal vielen Dank . es bringt mich auf jeden fall weiter und ich werde 
es ausprobieren. danke nochmal.
mfg
kaveh

Autor: Kaveh (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Karl heinz Buchegger,
nun bin ich so weit gekommen, dass AVR Studio nach dem compeilieren nur 
die drei unten stehende Fehlermeldungen anzeigt.

1-../AT90pwm3b.c:13:30: error: lib_mcu\compiler.h: No such file or 
directory
2-../AT90pwm3b.c:14:25: error: lib_mcu\mcu.h: No such file or directory
3-../AT90pwm3b.c:15:33: error: lib_mcu\psc\psc_drv.h: No such file or 
directory.

mfg
kaveh

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Na ja, du musst natürlich schon aus dem Zip-File die Source Code Files 
rausholen. Am besten unter Beibehaltung der Verzeichnisstruktur.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.