Forum: Mikrocontroller und Digitale Elektronik Arduino Uno C Programieren mit Atmel Studio


von Anton B. (pic16f887)


Lesenswert?

Hallo,

Ich habe vollgendendes Problem:

Ich würde gerne mein Arduino Uno in C oder C++ Programmieren. Als 
Programm verwende ich Atmel Studio 6.2.
Und ich möchte weiterhin über USB programmiern, da ich kein 
Programmiergerät habe.
wie Stell ich das an?

von Harald (Gast)


Lesenswert?

Einen Programmer kaufen...

von Joachim K. (yoshi_101)


Lesenswert?

Der Trick für Leute die lieber ein wenig mehr Aufwand haben als einen 
Programmer für 10€ zu bestellen:
kopier deinen Code in die arduino IDE und programmier das Board 
weiterhin damit ;)

von Eduard S. (schneehase)


Lesenswert?

Tipp google doch mal avrdude + atmel studio
oder visual studio + external programm

Man dazu gibt es sogar Videos auf youtube!

von Joachim K. (yoshi_101)


Lesenswert?

Eduard Scheske
> Tipp google doch mal avrdude + atmel studio
> oder visual studio + external programm

Bei mir funktionieren die Lösungen die mir Google liefert nicht, da die 
nötigen Treiber nach dem ausschalten jedesmal gelöscht werden...

von Marcel (Gast)


Lesenswert?

Du programmierst deinen Arduino immer in C/C++. Auch in der Arduino IDE 
kannst du weitestgehend auf die Arduino Bibliothekt verzichten. 
Lediglich die Sache mit setup() und loop() ist fest vorgegeben.

Ansonsten guck dir die Arduino Extension für das Atmel Studio an. Oder 
bau dir einen Post-Build Prozess ein, der automatisch nach jedem 
compilieren avrdude aufruft, um das Programm zu übertragen oder bastel 
dir eine Batch Datei, um das manuell zu machen.

von Hubert G. (hubertg)


Lesenswert?


von Andy B. (anders)


Lesenswert?

Ich bin nach der folgenden Anleitung vorgegangen und es klappt ohne 
Probleme:
http://cutmywire.wordpress.com/2013/07/21/arduino-und-co-mit-atmel-studio-nutzen/

von Helene (Gast)


Lesenswert?

Du brauchst keinen Programmer bestellen, sondern mit dem Bootloader vom 
Arduino das Programm hinunterladen-

Das Buch

 Powerprojekte mit Arduino und C
ISBN-10: 3645651314

zeigt dafür super Beispiele. Ich halte es für das beste yC Buch.

von Anton B. (pic16f887)


Lesenswert?

Hubert G. schrieb:
> http://xloader.russemotto.com/

Hat irgendwer erfahrungen mit dem programm?
Funktioniert das gut oder gibt es irgentwelche bugs?

das mit den external tools in atmel studio hab ich schon ausprobiert nur 
kommt bei mir ein fehler:

 stk500_getsync(): not in sync: resp=0x00

von Thomas T. (knibbel)


Lesenswert?

Anton B. schrieb:
> Hubert G. schrieb:
>> http://xloader.russemotto.com/
>
> Hat irgendwer erfahrungen mit dem programm?
> Funktioniert das gut oder gibt es irgentwelche bugs?
>
> das mit den external tools in atmel studio hab ich schon ausprobiert nur
> kommt bei mir ein fehler:
>
>  stk500_getsync(): not in sync: resp=0x00

Dir ist klar, dass Du den Arduino-Bootloader im AVR brauchst?

Ich kannte den Xloader bis gestern auch nicht und habe ihn gestern noch 
ausprobiert. Allerdings klappte der Upload zunächst nicht.

Was ich nicht berücksichtigt hatte: Ich hatte mein Arduino-Board (UNO 
R3) vorher mittels des ISP-Headers direkt aus Studio geflasht und dabei 
den Bootloader zerschossen. Xloader ging deshalb nicht und die 
Original-Arduino Software ging natürlich auch nicht mehr.

Erst nachdem ich den Bootloader (optiboot) wieder geflasht hatte, 
funktionierte der Xloader. Deshalb: Daumen hoch für das Programm...

Gruß,
Thomas

von Andy B. (anders)


Lesenswert?

Anton B. schrieb:
> das mit den external tools in atmel studio hab ich schon ausprobiert nur
> kommt bei mir ein fehler:
>
>  stk500_getsync(): not in sync: resp=0x00

Welchen Arduino hast du und was hast du bei External Tools in Arguments 
stehen?

von Kaj (Gast)


Lesenswert?

Joachim K. schrieb:
> da die
> nötigen Treiber nach dem ausschalten jedesmal gelöscht werden...
Bitte was?

von Daniel R. (h3po)


Lesenswert?

für den uno sind die passenden parameter
-p m328p -c arduino -P \\.\COMX -U 
flash:w:"$(ProjectDir)Debug\$(ItemFileName).hex":i

von Anton B. (pic16f887)


Lesenswert?

Andy B. schrieb:
> Anton B. schrieb:
>> das mit den external tools in atmel studio hab ich schon ausprobiert nur
>> kommt bei mir ein fehler:
>>
>>  stk500_getsync(): not in sync: resp=0x00
>
> Welchen Arduino hast du und was hast du bei External Tools in Arguments
> stehen?




Commands
C:\Users\Administrator\Desktop\avrdude\avrdude.exe

Arguments
-CC:\Users\Administrator\Desktop\avrdude\avrdude.conf -patmega328p 
-carduino -P\\.\COM4 -b160000 - 
Uflash:w:"$(ProjectDir)Debug\$(TargetName).hex":i


avrdude.exe und avrdude.conf hab ich aus dem Arduino Ordner.

von Anton B. (pic16f887)


Lesenswert?

Thomas T. schrieb:
> Anton B. schrieb:
>> Hubert G. schrieb:
>>> http://xloader.russemotto.com/
>>
>> Hat irgendwer erfahrungen mit dem programm?
>> Funktioniert das gut oder gibt es irgentwelche bugs?
>>
>> das mit den external tools in atmel studio hab ich schon ausprobiert nur
>> kommt bei mir ein fehler:
>>
>>  stk500_getsync(): not in sync: resp=0x00
>
> Dir ist klar, dass Du den Arduino-Bootloader im AVR brauchst?
>
> Ich kannte den Xloader bis gestern auch nicht und habe ihn gestern noch
> ausprobiert. Allerdings klappte der Upload zunächst nicht.
>
> Was ich nicht berücksichtigt hatte: Ich hatte mein Arduino-Board (UNO
> R3) vorher mittels des ISP-Headers direkt aus Studio geflasht und dabei
> den Bootloader zerschossen. Xloader ging deshalb nicht und die
> Original-Arduino Software ging natürlich auch nicht mehr.
>
> Erst nachdem ich den Bootloader (optiboot) wieder geflasht hatte,
> funktionierte der Xloader. Deshalb: Daumen hoch für das Programm...
>
> Gruß,
> Thomas


ich habe den XLoader auch ausprobiert. Auf jedenfall blink die LED wenn 
ich es Uploade, aber es kommt nicht der Gewünschte effekt.

kann es sein das es an meinem C Code liegt?

#include <avr/io.h>
#ifndef F_CPU
#define F_CPU 16000000UL     /* Quarz mit 16 Mhz */
#endif
#include <util/delay.h>


int main()
{
  DDRB = ( 1 << DDB0 ) | ( 1 << DDB5 );

    while(1)
    {
    PORTB |= ( 1 << PB0 );
    _delay_ms(1000);
    PORTB |= ( 1 << PB5 );
    _delay_ms(100);

    }
  return 0;
}

von Hubert G. (hubertg)


Lesenswert?

Was für ein Effekt soll denn eintreten?
PB0 und PB5 sind auf high und dann?

von Anton B. (pic16f887)


Lesenswert?

Hubert G. schrieb:
> Was für ein Effekt soll denn eintreten?
> PB0 und PB5 sind auf high und dann?

Ja richtig, ist das dein kein effekt?
Folgendes passiert:
Die LED an PB0 Blink sehr schwach.
Die LED an PB5 leuchtet gar nicht.

von Oliver R. (orb)


Lesenswert?

zum Blinken gehört normal, daß man die LED auch wieder ausschaltet ...

von Hubert G. (hubertg)


Lesenswert?

Anton B. schrieb:
> Die LED an PB0 Blink sehr schwach.
> Die LED an PB5 leuchtet gar nicht.

Es würde mich interessieren wie die Led an PB0 schwach blinkt wenn sich 
der Ausgang nicht verändert.

von Anton B. (pic16f887)


Lesenswert?

Okay bei diesem Code:
#include <avr/io.h>
#ifndef F_CPU
#define F_CPU 16000000UL     /* Quarz mit 16 Mhz */
#endif
#include <util/delay.h>


int main()
{
  DDRB = ( 1 << DDB0 ) | ( 1 << DDB5 );

    while(1)
    {
    PORTB |= ( 1 << PB0 );
    _delay_ms(1000);
    PORTB |= ( 1 << PB5 );
    _delay_ms(1000);
    PORTB |= ( 0 << PB0 );
    _delay_ms(1000);
    PORTB |= ( 0 << PB5 );
    _delay_ms(1000);

    }
  return 0;
}

Passiert dass:

Die LED an PB0 geht sofort an, und kurz darauf die LED an PB5. Dann 
passiert nichts mehr..

eins hat es gebracht, die LEDs laufen jetzt auf voller helligkeit.

von Anton B. (pic16f887)


Lesenswert?

Hubert G. schrieb:
> Anton B. schrieb:
>> Die LED an PB0 Blink sehr schwach.
>> Die LED an PB5 leuchtet gar nicht.
>
> Es würde mich interessieren wie die Led an PB0 schwach blinkt wenn sich
> der Ausgang nicht verändert.

Ja das habe ich mich auch gefragt!

von Anton B. (pic16f887)


Lesenswert?

>> Welchen Arduino hast du und was hast du bei External Tools in Arguments
>> stehen?
>
>
>
>
> Commands
> C:\Users\Administrator\Desktop\avrdude\avrdude.exe
>
> Arguments
> -CC:\Users\Administrator\Desktop\avrdude\avrdude.conf -patmega328p
> -carduino -P\\.\COM4 -b160000 -
> Uflash:w:"$(ProjectDir)Debug\$(TargetName).hex":i
>
> avrdude.exe und avrdude.conf hab ich aus dem Arduino Ordner.


Ach ja ich hab den Arduino UNO

von Hubert G. (hubertg)


Lesenswert?

So wird es blinken.
1
 PORTB |= ( 1 << PB0 );
2
    _delay_ms(1000);
3
    PORTB |= ( 1 << PB5 );
4
    _delay_ms(1000);
5
    PORTB &=~ ( 1 << PB0 );
6
    _delay_ms(1000);
7
    PORTB &=~ ( 1 << PB5 );
8
    _delay_ms(1000);
Du solltest mal das AVR-Tutorial lesen.

von Anton B. (pic16f887)


Lesenswert?

Hubert G. schrieb:
> So wird es blinken.
>
1
>  PORTB |= ( 1 << PB0 );
2
>     _delay_ms(1000);
3
>     PORTB |= ( 1 << PB5 );
4
>     _delay_ms(1000);
5
>     PORTB &=~ ( 1 << PB0 );
6
>     _delay_ms(1000);
7
>     PORTB &=~ ( 1 << PB5 );
8
>     _delay_ms(1000);
9
>
> Du solltest mal das AVR-Tutorial lesen.

Oh shit, dass hab ich überlesen das bits auf LOW setzten analog 
funktioniert.
Kurz geändert, und.... Yeah es läuft!

Danke schön!!!

von chris_ (Gast)


Lesenswert?


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.