Home/Startseite
Shop
 Kauf auf Rechnung
 faire Versandkosten
 schnelle Lieferung
Kontakt / Service
 
login.php profile.php?mode=register index.php search.php faq.php
myAVR.de Foren-Übersicht » myAVR Board MK2 USB » LED blinken - geändertes Beispielprogramm geht nicht
Neues Thema eröffnen  Neue Antwort erstellen Vorheriges Thema anzeigen :: Nächstes Thema anzeigen 
LED blinken - geändertes Beispielprogramm geht nicht
BeitragVerfasst am: 10.03.2010, 22:49 Antworten mit Zitat
schorschi_gast
Gast




Hallo!

Ich habe vor kurzem das Board MK2 mit dem USB-Programmer bekommen und habe mit dem LED-Testprogramm (wo alle angesteuert werden) angefangen. Das hat auch alles funtkioniert, alles in Ordnung.
Jetzt hab ich angefangen, das Programm ein bisschen zu verändern. Die Ansteuerung auf Port B gelegt --> ging auch noch. Jetzt wollte ich alles ein bisschen interessanter gestalten und die LEDs blinken lassen mithilfe einer while-Schleife, in der eine HIlfsvariable hochgezählt wird. Aber es passiert nichts. Die LEDs leuchten nach dem flashen nach wie vor.
Habe ich irgendwas falsch gemacht? Irgendwelche Einstellungen vergessen?
Ich programmiere mit AVR Studio 4 und flashe mit dem AVR Prog.

Könnt ihr mir helfen!
Viele Grüße, Johannes
BeitragVerfasst am: 11.03.2010, 8:05 Antworten mit Zitat
hotline
Anmeldungsdatum: 10.04.2007
Beiträge: 531




Hallo Johannes,
ohne dein Programm zu kennen, kann man dir nur schwehr weiterhelfen. Stell es doch einfach mal ins Netz und lass uns dann noch mal darüber reden Smile
Viel spaß noch beim ausprobieren.
Benutzer-Profile anzeigen Private Nachricht senden
Quellcode
BeitragVerfasst am: 11.03.2010, 8:53 Antworten mit Zitat
schorschi_gast
Gast




Oh ja, natürlich. Tut mir Leid.

#include <avr/io.h>
#include <avr/wdt.h>
void init (void){
DDRB=0x07; // Set Bits 0, 1 und 2 von PORTB in 1 - "Ausgang"
}

main (void){
int i=0;
init(); // Initialize Peripherals
while (1) // Mainloop
{
wdt_reset();
PORTB=0x07; // auf Port B Bit 0, 1 und 2 LEDs einschalten
while(i<10000) i++;
wdt_reset();
PORTB=0x00; // auf Port B Bit 0, 1 und 2 LEDs ausschalten
}
}
BeitragVerfasst am: 11.03.2010, 8:55 Antworten mit Zitat
schorschi_gast
Gast




Ich habe die drei Portpins B0, B1 und B2 mit den drei LED verbunden, da ja auch diese Test-Hex (für Taster, LEDs und Summer) geht. Das hab ich einfach ein bisschen abgewandelt.

Vielen Dank schon mal!
BeitragVerfasst am: 11.03.2010, 19:25 Antworten mit Zitat
Berecke
Anmeldungsdatum: 13.11.2008
Beiträge: 170
Wohnort: Berlin




Also ich meine, die Verzögungsschleife ist zu klein gewählt. Du müsstest auf ca. 10ms kommen. Also noch eine innere Schleife einfügen.

_________________
Gruß Berecke
Benutzer-Profile anzeigen Private Nachricht senden ICQ-Nummer
BeitragVerfasst am: 11.03.2010, 22:55 Antworten mit Zitat
schorschi
Anmeldungsdatum: 10.03.2010
Beiträge: 2
Wohnort: Ingolstadt




Hi Berecke,

danke für deine Antwort. Ich hab jetzt mal noch eine while-Schleife eingebaut, aber das wars irgendwie auch nicht. Nach dem Programmieren leuchten die LEDs mit halber Intensität, als würden sie wirklich nur 50% angesteuert - aber man sieht kein Flimmern oder Blinken. Es macht den Eindruck, als hätte sich der Controller aufgehängt...
Irgendwie bin ich ein bisschen am Verzweifeln... Sad

Code:
#include <avr/io.h>
#include <avr/wdt.h>

void init (void){
   DDRB=0x07; // Set Bits 0, 1 und 2 als Ausgang
}
main (void){
   int i=0;
   int j=0;
   init(); // Initialize Peripherals
   while (1) // Mainloop
      {
      wdt_reset();
      i=0;
      PORTB=0x07;
      while(i<10000){
         i++;
         while(j<1000) j++;
         j=0;
      }
      wdt_reset();
      PORTB=0x00;
      i=0;
      while(i<10000){
         i++;
         while(j<1000) j++;
         j=0;
      }
   }
Benutzer-Profile anzeigen Private Nachricht senden
BeitragVerfasst am: 12.03.2010, 17:22 Antworten mit Zitat
Diddl
Anmeldungsdatum: 01.09.2006
Beiträge: 631




Bitte keine Zeitverzögerungen mit Schleifen machen, das ist sehr unprofessionell! Confused

Dazu gibt es doch bessere Methoden, Timer, Interrupts oder notfalls delay_ms().


+ Die Schleifen sind Taktfrequenz Abhängig

+ Compiler abhängig, eine neue Version oder andere Einstellungen --> anderes verzögerung
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen ICQ-Nummer
BeitragVerfasst am: 15.03.2010, 14:44 Antworten mit Zitat
Berecke
Anmeldungsdatum: 13.11.2008
Beiträge: 170
Wohnort: Berlin




Hallo Diddl,

da gebe ich Dir recht, aber... hier geht es um Grundlagen und erst mal sollte das Progrämmchen laufen... dann könnte man einen Interrupt angehen. Und dann werden wir richtig professionell... Razz

Warum läuft denn nun das Programm nicht?

Code sieht erst mal gut aus. Nimm doch mal die Watchdog-Befehle heraus (wdr). ATmega läuft mit Quarz 3,8...MHz? Die Fuses richtig gesetzt? LEDs richt angeschlossen? Du hast jetzt 10E6-Schleifendurchläufe.. das müsste reichen.

Also ich habe es mal im AVRStudio getestet: Der Compiler optimiert die Schleifen heraus. Ist eben nicht für die Technik gemacht Wink Stell mal unter -O0 statt -Os unter Project ein.

_________________
Gruß Berecke
Benutzer-Profile anzeigen Private Nachricht senden ICQ-Nummer
BeitragVerfasst am: 26.03.2010, 17:56 Antworten mit Zitat
schorschi
Anmeldungsdatum: 10.03.2010
Beiträge: 2
Wohnort: Ingolstadt




Vielen Dank, mit der Herausnahme der Optimierungen gehts jetzt. Das mit den leeren Schleifen war wirklich nur zum Test gedacht.

Wie genau ist denn die Funktion delay_ms() - auch wenn das grad nicht mehr richtig zum Thema gehört? Kann man damit brauchbar arbeiten oder wie realisiert man beim ATmega8 eine brauchbare ms-/µs-Basis?
Danke schon mal für die Hilfe!

Grüße sagt
Johannes
Benutzer-Profile anzeigen Private Nachricht senden


LED blinken - geändertes Beispielprogramm geht nicht
myAVR.de Foren-Übersicht » myAVR Board MK2 USB
Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Alle Zeiten sind GMT + 1 Stunde  
Seite 1 von 1  

  
  
 Neues Thema eröffnen  Neue Antwort erstellen  


Powered by phpBB © 2001-2004 phpBB Group
Designed for Trushkin.net | Themes Database
Deutsche Übersetzung von phpBB.de