LED Stk600 und AVR32

OP #2901639
Lesenswert?

Hi Leute,

ich bin Neuling und habe ein Problem mit mit einem selbst geschriebenen 
C-Code. Ich möchte eigendlich nur eine LED auf dem STK-Board ein- und 
wieder ausschalten. Als HW habe ich ein Stk600-Board, eine RCUC3C1-38 
Routing Platine und darauf eine TQFP100 für den MC. Der MC ist ein 
AVR32C3C1512C.

Hier mein Code:

#define FPBA_HZ 8000000
#define FCPU  64000000
#define TC_INSTANCE               &AVR32_TC0
#define TC_INSTANCE_IRQ           AVR32_TC0_IRQ0
#define TC_CHANNEL                0

#include <asf.h>
#include <AVR32/io.h>

int main (void)
{
  board_init();

  while (1)
  {
    gpio_clr_gpio_pin(AVR32_PIN_PC06);
    gpio_clr_gpio_pin(AVR32_PIN_PC07);

    gpio_set_gpio_pin(AVR32_PIN_PC06);
    gpio_set_gpio_pin(AVR32_PIN_PC07);
  }

}

Die LED kann ein- aber nicht mehr ausgeschalten werden was ich nicht 
verstehe warum. Ich denke, dass ich einen Fehler im C-Code gemacht habe.

Zum Code: Ich verwende AtmelStudio 6, dort habe ich ein neues Projekt 
erstellt. UserBoard->UC3C anschließend habe ich einen Namen vergeben und 
den o.g. Controller ausgewählt. Danach habe ich im ASF-Wizard 
GPIO,TC,SCIF, delay funktions und Generic board support hinzugefügt.

Sonst habe ich keine weiteren Einstellungen vorgenommen.
Nun hoffe Ich, dass mir von euch jemand einen Fehler oder eine falsche 
Einstellung sagen kann.

Evtl. bin ich heute Nachmittag nicht mehr am PC, so dass ich spätestens 
morgen zurückschreiben werde.

Besten Dank schon mal im Vorraus

Hunner
OP #2902431
Lesenswert?

Also den Fehler habe ich gefunden. Ich habe die Anweisungen aus der 
While-Schleife genommen und schon gings. Das Problem war nur, dass der 
MC so schnell arbeitet, dass ich das Ausschalten der LEDs nicht bemerkt 
habe. Nun aber ein anderer Fehler. Ich habe zum Verzögern der Zeit 
zwischen dem Einschalten der beiden LEDs eine For-Schleife programmiert. 
egal was ich da für Zahlenwerte hineinschreibe, werden die beiden LEDs 
immer gleichzeitig eingeschalten. Ich habe auch mal die Funktion 
gpio_tgl_... zum toggeln eines Pins versucht, was aber keine Wirkung 
zeigte.
Evtl. hat jemand dazu eine Idee
Gast #2902445
Lesenswert?

Hallo Christian,

die While-Schleife ist eine Endlosschleife. Wenn Du die frei laufen 
läßt, dann wird die LED so schnell ein- und ausgeschaltet, dass Du die 
korrekten Vorgänge nur am Osziskop erkennen kannst.

Ich gehe davon aus, dass Du keinen Debugger benutzt. Dann könntest Du 
Schritt für Schritt schauen, ob die Befehle richtig abgearbeitet werden.

Alternativ könntest Du eine For schleife einbauen, die einfach nur 
hochzählt, um so eine Verzögerung zu erzeugen. Nimm einen großen 
Datentyp und taste Dich langsam heran. Als Startwert lass sie bis 1000 
zählen. Beid er Optimierungsoption solltest Du O0 (None) einstellen, 
sonst könnte Sie entfallen, weil der Kompiler keinen ausführbaren Code 
erkennt.

Außerdem sehe ich nicht, dass Du der GPIO-Funktion mitteilst, dass 
PC6_PIN06 und PIN07 als Ausgang funktionieren sollen.

Also überprüfe, ob in der board_init()

so etwas Ähnliches drin steht:

gpio_configure_pin(AVR32_PIN_PC06,GPIO_DIR_OUTPUT | GPIO_INIT_HIGH);
gpio_configure_pin(AVR32_PIN_PC07,GPIO_DIR_OUTPUT | GPIO_INIT_HIGH);

Wenn nicht, denn hinzufügen.

Du hast einen Timer definiert und instanziert. Wenn benutzt Du ihn? Wozu 
brauchst Du ihn? Ich kann nirgends eine Stelle im Code finden, wo Du ihn 
abfragst.

Wird in Deiner Board-init die sys_clk_init() des ASF aufgerufen?

Ansonsten bleiben die Einstellungen für FPBA und FCPU wirkungslos, weil 
als Standard-Oszillator der RC-Oszilllator mit 115 kHz benutzt wird.

Tipp: Im Zweifel empfiehlt es sich die Beispiele zu benutzen.

Hoffe das reicht erst einmal, für den Anfang

Viel Erfolg ...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren