AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

AVR C Problem mit Schleife

Ein Thema von Gehstock · begonnen am 13. Mär 2009 · letzter Beitrag vom 15. Mär 2009
Antwort Antwort
Seite 1 von 2  1 2      
Gehstock

Registriert seit: 28. Jan 2006
Ort: Görlitz / Sachsen
489 Beiträge
 
Delphi 2007 Professional
 
#1

AVR C Problem mit Schleife

  Alt 13. Mär 2009, 06:12
Code:
   DDRB = (1 << DDB1);       // PB1 als Ausgang
   DDRB &= ~(1 << DDB3);   // PB3 als Eingang
//   while PORTB = ~(1<<PB3); // wenn low
   if (!(PINB & (1 << PB3)))    // wenn PB3 geschlossen (HIGH)
   {
   PORTB = PORTB | (1 << DDB1);    //dann LED and PB1 An
   i++;                     //i um 1 erhöhen
   if (i = 15) i =0;            //wenn i = 15 dann i = 0
    while (1)                      // solange Button nicht gedrückt
   {launch_effect(i);}            //soll Effekt(i) in einer schleife laufen
}
   else
   PORTB = PORTB & ~(1 << DDB1);   //wenn button nicht gedrückt LED aus
   }

irgendwie blick ich da nicht durch was passieren soll hab ich kommentiert

der erste Effekt läuft zwar durch aber schon der Button hat keine Funktion mehr

[edit=mkinzler]Delphi-Tag durch C-Tag ersetzt Mfg, mkinzler[/edit]
Marcel
  Mit Zitat antworten Zitat
R2009

Registriert seit: 9. Mär 2009
Ort: Heidelberg
440 Beiträge
 
Delphi 2007 Professional
 
#2

Re: AVR C Problem mit Schleife

  Alt 13. Mär 2009, 06:35
Hi,

ich weiss nicht was du erreichen willst. Gib doch mal eine kurze Beschreibung was deine Routine machen soll oder macht.
Ich habe ehrlich gesagt keine Lust an einem Ratespiel teilzunehmen.
Da ich sehr viel mit uP's zu tun hab kann ich dir sicher helfen.

Zitat:
Code:
if (!(PINB & (1 << PB3)))   // wenn PB3 geschlossen (HIGH)
Ich glaube das funktioniert so nicht! Muss erst ausprobieren. Die Bedingung ist, glaub ich, falsch.
Probiers mal so:
Zitat:
Code:
if ((PINB & 0x08)==0)
Viel Spass!

[edit=mkinzler]C-Tags eingefügt Mfg, mkinzler[/edit]
Rainer Unger
Mein Profil:
Studium Allgemeine Elektrotechnik TH Darmstadt
Entwicklung von Tools für die Rundsteuer und Zählertechnik.
uP's Atmel Prozessoren (ATmega16,32,88...) in C und Assembler.
  Mit Zitat antworten Zitat
Gehstock

Registriert seit: 28. Jan 2006
Ort: Görlitz / Sachsen
489 Beiträge
 
Delphi 2007 Professional
 
#3

Re: AVR C Problem mit Schleife

  Alt 13. Mär 2009, 06:41
Soll eigendlich nichts anderes tun wie schon in den Kommentaren erwähnt

Programm soll bei effekt 0 Starten und das solange bis
-button an PB3 gedrückt wird (LOW weil gegen GND?)

dann
-soll kurz die LED an PB1 Leuchten
- i um eins erhöht werden (wenn i = 15 ist dann wieder zurück zu 0)

und dann wieder der Effekt(i) in einer schleife ablaufen bis der Button erneut betätigt wird
die LED an PB1 ist in diesen Zustand aus
Marcel
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.481 Beiträge
 
Delphi 10.1 Berlin Professional
 
#4

Re: AVR C Problem mit Schleife

  Alt 13. Mär 2009, 08:57
Zitat:
Code:
if (i = 15) i =0;           //wenn i = 15 dann i = 0
Bist du dir sicher, dass du "i = 15" und nicht "i == 15" meinst?


Zitat:
Code:
while (1)
Da läuft die Schleife aber ziemlich lange, denn 1 ist immer ungleich 0 und damit True.
  Mit Zitat antworten Zitat
Benutzerbild von divBy0
divBy0

Registriert seit: 4. Mär 2007
Ort: Sponheim
1.021 Beiträge
 
Delphi XE2 Professional
 
#5

Re: AVR C Problem mit Schleife

  Alt 13. Mär 2009, 09:42
Ich glaube nicht, dass wenn die While-Schleife einmal läuft, der µC noch was anderes ausführt. Der müsste dann eigentlich in der Schleife festhängen.

Eingentlich brauchst du doch für launch_effect gar keine eigene Schleife. Das ganze Programm läuft doch immer im Kreis (zyklisch), sollte es zumindest.

In der Hauptschleife ließt du die Eingänge ein, ist die Taste gedrückt zählst du I hoch, dann rufst du launch_effect mit I auf. Solange niemand die Taste drückt läuft das gleiche Programm.
Marc
9 von 10 Stimmen in meinem Kopf sagen ich bin nicht verrückt, die 10. summt die Melodie von Tetris... | Wenn das die Lösung ist, dann hätte ich gerne mein Problem zurück! | engbarth.es
  Mit Zitat antworten Zitat
Gehstock

Registriert seit: 28. Jan 2006
Ort: Görlitz / Sachsen
489 Beiträge
 
Delphi 2007 Professional
 
#6

Re: AVR C Problem mit Schleife

  Alt 15. Mär 2009, 12:47
Habs jetzt so geändert tut auch fast was es soll

Code:
int main (void)
{
int i = 0;
   ioinit();
   bootmsg();
   current_layer = 0x00;// Bei unterster Ebene starten
   sei();
   while (1)// Haupt programm loop.
   {
    while (!(PINB & (1 << PB3)))// wenn taster an
           {   
      PORTB = PORTB | (1 << DDB1);//LED an
      i = i++; //und I erhöhen
            if (i == 15) i = 0;
           }
           launch_effect(i);
           PORTB = PORTB & ~(1 << DDB1);// LED aus
         }
}
außer das nach dem lösen des tasters zwar die LED wieder ausgeht aber das programm gar nicht läuft(launch_effect)
Marcel
  Mit Zitat antworten Zitat
Benutzerbild von divBy0
divBy0

Registriert seit: 4. Mär 2007
Ort: Sponheim
1.021 Beiträge
 
Delphi XE2 Professional
 
#7

Re: AVR C Problem mit Schleife

  Alt 15. Mär 2009, 13:10
Hi!

Warum hast du denn überhaupt die 2. while-Schleife? Vielleicht verstehe ich ja falsch, was du vor hast.

Jetzt ist es ja so, dass solange die Taste gedrückt ist, die LED leuchtet und i hochgezählt wird.

Dafür müsste eigentlich eine if-Abfrage besser sein. Wenn Taster gedrückt, dann LED ein, i hochzählen...
Da das Hauptprogamm in einer Schleife läuft wird i auch weiter erhöht, wenn die Taste gehalten wird.

EDIT: Wie ist denn lauch_effect aufgebaut?
Marc
9 von 10 Stimmen in meinem Kopf sagen ich bin nicht verrückt, die 10. summt die Melodie von Tetris... | Wenn das die Lösung ist, dann hätte ich gerne mein Problem zurück! | engbarth.es
  Mit Zitat antworten Zitat
Gehstock

Registriert seit: 28. Jan 2006
Ort: Görlitz / Sachsen
489 Beiträge
 
Delphi 2007 Professional
 
#8

Re: AVR C Problem mit Schleife

  Alt 15. Mär 2009, 13:16
ja hatte ich unterdessen auch geändert Problem ist jetzt noch das der Taster manchmal mehrere sekunden gehalten werden muss bevor die LED angeht bzw. i erhöht wird und nach dem lösen die LED wieder für mehrere sekunden brennnt

ich hab fast das Gefühl das die CPU überlastet ist weil die Dauer je nach Aufwand für den Effekt variiert
Marcel
  Mit Zitat antworten Zitat
Benutzerbild von divBy0
divBy0

Registriert seit: 4. Mär 2007
Ort: Sponheim
1.021 Beiträge
 
Delphi XE2 Professional
 
#9

Re: AVR C Problem mit Schleife

  Alt 15. Mär 2009, 13:20
Das ist klar, wenn launch_effect eine lange Laufzeit hat, dann reagiert auch die Taste und die LED träge.

Welchen µC setzt du denn eigentlich ein?
Marc
9 von 10 Stimmen in meinem Kopf sagen ich bin nicht verrückt, die 10. summt die Melodie von Tetris... | Wenn das die Lösung ist, dann hätte ich gerne mein Problem zurück! | engbarth.es
  Mit Zitat antworten Zitat
Gehstock

Registriert seit: 28. Jan 2006
Ort: Görlitz / Sachsen
489 Beiträge
 
Delphi 2007 Professional
 
#10

Re: AVR C Problem mit Schleife

  Alt 15. Mär 2009, 13:25
ATMega16-16 @14 MHz
Marcel
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:19 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz