Forum: Mikrocontroller und Digitale Elektronik Problemm mit Compiler?


von Kaveh (Gast)


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

von Rufus Τ. F. (rufus) Benutzerseite


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.

von Karl H. (kbuchegg)


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.

von Kaveh (Gast)


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?part_id=4239

von Karl H. (kbuchegg)


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.

von Kaveh (Gast)


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?part_id=4239

von Karl H. (kbuchegg)


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.

von Karl H. (kbuchegg)


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
1
#ifdef _ICC_
2
...
3
#endif
ausgeblockt

Ein
1
#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.
1
//! @file psc_drv.c,v
2
//!
3
//! Copyright (c) 2004 Atmel.
4
//!
5
//! Please read file license.txt for copyright notice.
6
//!
7
//! @brief This file contains simple example for the PSC1
8
//!
9
10
11
#include <avr/io.h>
12
#include <avr/interrupt.h>
13
14
#include "lib_mcu\compiler.h"
15
#include "lib_mcu\mcu.h"
16
#include "lib_mcu\psc\psc_drv.h"
17
18
19
ISR( PSC1_EC_vect )
20
{
21
22
PIND|=0x80;    // just to see that interrupt is alive !
23
24
}
25
26
27
28
int main()
29
30
{
31
   DDRD  |= 0xFF;
32
   PORTD |= 0xFF;
33
34
   // PSC is on 12 BIT from 0X0000 To 0x0FFF*
35
36
   OCR1SAH = 0x00;    OCR1SAL = 0X00;
37
   OCR1RAH = 0X05;    OCR1RAL = 0X00;
38
   OCR1SBH = 0X03;    OCR1SBL = 0X80;
39
   OCR1RBH = 0X0F;    OCR1RBL = 0Xff;
40
41
42
   Psc1_use_64_mega_pll_clock();  // Use PLL as clock at 64MHz
43
44
   Enable_both_psc1_outputs();   // Enable PSC1 output
45
   Psc1_outputs_active_high();   // PSC1 output active is High level
46
   Psc1_in_1_ramp_mode();        // PSC1 in one Ramp mode
47
48
49
50
   PIM1=0x01;                    // enable IT end of cycle PSC1
51
   SREG=0x80;                    // enable interrupt
52
53
   Start_psc1();                 // let's go
54
55
  while(1);
56
}

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
1
 ...
2
3
#define Psc1_use_io_clock()                           (PCNF1 &= ~(1<<PCLKSEL0) )
4
//! Start the PLL at 64MHz and connect it to PSC1
5
6
7
inline void Psc1_use_64_mega_pll_clock()
8
{
9
  Start_pll_64_mega();
10
  Wait_pll_ready();
11
  Psc1_use_pll_clock(); 
12
}
13
14
15
//! Start the PLL at 32MHz and connect it to PSC1
16
#define Psc1_use_32_mega_pll_clock()                                          \
17
          (Start_pll_32_mega(),                                               \
18
19
 ...


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 :-)

von Kaveh (Gast)


Lesenswert?

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

von Kaveh (Gast)


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

von Karl H. (kbuchegg)


Lesenswert?

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

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.