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
> 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.
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.
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
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.
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
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.
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 :-)
Hallo Karl heinz Buchegger, erstmal vielen Dank . es bringt mich auf jeden fall weiter und ich werde es ausprobieren. danke nochmal. mfg kaveh
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.