Forum: Mikrocontroller und Digitale Elektronik AVR Studio 7 und ProMicro


von Christian S. (stowny)


Lesenswert?

Hallo zusammen,

Ich habe mir kürzlich einen ProMicro 5V von DreamSpark geholt.
Ich habe damit bereits eingie Programm mit dem Arduino IDE relisiert.

Nun habe ich, um die Libraries des IDE zu umgehen, auf das AVR Studio 7 
gewechselt.

Für Testzwecke habe ich mir sinnngemäss folgendes Programm gebastelt:

DDRB = 0xFF;
while(1) {
 _delay_ms(500);
 PORTB = 0x00;
 _delay_ms(500);
 PORTB = 0xFF;
}

Ich hätte erwartet, dass ich dadurch auf allen B-Pins ein Blinkicht 
erhalte.
Problem: Nichts tut sich bei der LED.

Das Programm kompiliert ohne Fehler.
Das .hex File wird erstellt.
Der Upload mittels avrdude, eingebunden in AVR Studio, funktioniert 
auch.
Die config von avrdude ist die selbe wie im Arduino IDE.

Was mache ich falsch?
Irgend welche Tip?
Besten Dank.

von Michael U. (amiga)


Lesenswert?

Hallo,

zeige das benutzte Programm, kein "sinngemäßes".
Hier fehlen z.B.nötige includes.

PS: Du kannst auch einfach setup() und loop() aus dem Arduino-Sketch 
löschen und Dein Progrmm reinkopieren und compilieren. Dann werden keine 
Arduino-Sachen eingebunden.

Gruß aus Berlin
Michael

von Maximilian S. (maxst)


Lesenswert?

Hallo Christian,

die LED blinken zu lassen ist das Hello World des Mikrocorntoller und 
ich habe das Selbe erst gestern realisiert.

Eins meiner Probleme war , dass Atmel !nur! main.c ausführt. Falls dein 
Programm anders benannt ist, einfach ändern oder in eine main einbauen.
Ich gehe mal davon aus, dass nur Headerdateien vorangestellt sind.
Mein funktionierender Code : (LED ist an PE4 bei mir)

DDRE  = 0b11111111;
PORTE = 0b00000000;


while(1){
  PORTE |= (1<<PE4);
  _delay_ms(500);
  PORTE &=  ~(1<<PE4);
  _delay_ms(500);
}

von Christian S. (stowny)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

Das mit dem Löschen von setup() und loop() wuste ich nicht.
Danke dafür. Werde da auch noch Tests durchführen.

Genau, 'Hello World'. War auch mein Idee. Simpel.
PE4? ist das beim ProMicro überhaupt herausgeführt?
Habe ich ein falsches Pinout? Würde einges erklären...

von Maximilian S. (maxst)


Lesenswert?

Hallo Christian,


ich habe einen anderen MC und deshalb ist da Register und die Ports 
anders.
Ich kenn mich mit deinem leider nichts aus. Allerdings denke ich, dass 
du von den 2 LEDS nur eine programmieren kannst. Die andere ist 
typischer weise nur da um anzuzeigen (sie leuchtet also) ob überhaupt 
Saft drauf ist.

Für die PD5 LED bei dir, sollte das dann so aussehen:


DDRD  = 0b11111111;
PORTD = 0b00000000;


while(1){
  PORTD |= (1<<PD5);
  _delay_ms(500);
  PORTD &=  ~(1<<PD5);
  _delay_ms(500);
}

Wenn das nicht funktioniert, versuchs mal mit der anderen. Du musst das 
ja dann nur noch anpassen.

Grüße Max

von ErdBaer (Gast)


Lesenswert?

Hallo Christian,

Der Max hat einen kleinen Denkfehler in seiner Hilfestellung: Er hat 
sowohl ein anderes Board als auch einen anderen Controller.
Es schadet natürlich nicht nochmal sicherzugehen dass der Schaltplan 
sich mit der Realität deckt, aber ich würd den Fehler wie Michael auch 
eher im Umfeld des "Umzugs" von Arduino nach Atmel Studio vermuten.

Nur so aus eigener Neugier: Deine Toolchain sieht folgendermaßen aus
Atmel Studio -> Hexfile -> AVR Dude -> Arduino USB Bootloader, oder?

Auf der ATMEL seite hab ich schon die eine oder andere Erfahrung, kenn 
mich aber nicht mit dem Arduino Gedöns aus.
Wäre es eine Option für Dich mit einem blanko Atmel Studio Projekt 
anzufangen. Dann könnte man zumindest sicher sein dass nicht irgend eine 
Arduino Abstraktionsebene "Mitreden" will.

Nicht entmutigen lassen!

von Christian S. (stowny)


Lesenswert?

Hei Leute,

Danke für die Unterstützung...

Der Tip von Michael war Gold wert....

Hab einfach das Arduino IDE genommen, setup() und loop() gelöscht, 
meinen Code 1:1 vom Atmel Studio rein kopiert, kompiliert und geladen.

Und siehe da, die LED Blinkt!!!

Ich gehe daher davon aus, dass der Fehler im Atmel Studio oder auf dem 
Weg zum kontroller passiert.
Womit ich nicht sagen will, dass das Atmel Studio das Problem ist.
Ist wahrscheinlich ein Konfig-Fehler von mir.

Die Frage ist einfach wo?

Toolchain...
Atmel Studio -> Hexfile -> AVR Dude -> Arduino USB Bootloader, oder?
Wenn Du mit "USB Bootloader" den Teil nach dem Reset meinst wo sich der 
Controller mit einem COM Port beim System meldet und über den avrdude 
dann programmiert wird, dann stimmt dies exakt.
Laut Log wird auch das korrekte hex-File verwendet und nach dem Flashen 
verifiziert.

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.