mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Threads mit avr


Autor: Christian Buntrock (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo.
Ich möchte eigentlich etwas recht simples schreiben nur brauche ich da
so eine Art threads (glaube ich zumindest^^).

Und zwar habe ich folgendes:
Ich habe zwei Ports. B und C. An C sind LEDS. Jetzt möchte ich wenn Pin
2 an B auf 1 gesetzt wird, das C auf 0xF0 gesetzt wird. Also das
praktisch die obere hälfte aufleuchtet. Wenn Pin 1 an B auf gesetzt
wird sol dagegen 0x0F aufleuchten. Mein Problem dabei ist, das man die
möglichkeit haben soll, wenn Pin 1 oder 2 an B auf 1 gesetzt wird, dass
man noch 250 ms sekunden zeit hat die andere seite ebenfalls auf 1 zu
setzen. also das innerhalb der 250 ms es möglich ist, Port C auf 0xFF
zu setzen. Wenn ich jetzt delay_ms nehmen würde, dann wäre das ja im
grunde eine pause in der gar nix mehr geht. ich will aber das er im
hintergrund zählt (also eben wie so eine art zusätzlicher thread) damit
man innerhalb der zeit noch auf 1 setzen kann.
ich hoffe es ist ein wenig rübergekommen was ich meine :)

programmiere mit CodeVision in C und habe das AT90S8535.
bisher habe ich folgdenden code (also ohne die 250ms geschichte...):

------------------------------
void main(void)
{

PORTB=0x00;
DDRB=0x00;

PORTC=0x00;
DDRC=0xFF;

while (1)
      {
             if(PINB.1)
             {
                PORTC=0x0F;
                delay_ms(2500);
                PORTC=0x00;
             }

             if(PINB.2)
             {
                PORTC=0xF0;
                delay_ms(2500);
                PORTC=0x00;
             }
      };
}
------------------------------
also bis jetzt kann man also auf der einen seite 1 setzen und die ein
ehälfte wird für 2,5 sekunden eingeschaltet...


viele dank für eure hilfe!!

gruß
christian

Autor: C. Lechner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das würde ich mit einem Timer lösen. Auch wenn ich jetzt nicht weis, wie
man das mit CodeVision lösen kann, das Datenblatt ist sicherlich eine
gute Anlaufstelle, denn die Register werden währscheinlich in
CodeVision auch so ähnlich heißen wie im Datenblatt.

CU
- cl

Autor: Schoaschi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
lol :-).. hast du schon mal an schleifen und ifs gedacht?

----------------------------------
int x;
while (1)
      {
      x=1;
             if(PINB.1)
             {
                PORTC=0x0F;
                while(x<=255)
                 {
                  if(PINB.2)
                   {
                   PORTC=0xFF;
                   }
                  x++;
                  delay_ms(1);
                 }
                delay_ms(2500);
                PORTC=0x00;
             }

             if(PINB.2)
             {
                PORTC=0xF0;
                while(x<=255)
                 {
                  if(PINB.1)
                   {
                   PORTC=0xFF;
                   }
                  x++;
                  delay_ms(1);
                 }
                delay_ms(2500);
                PORTC=0x00;
             }
      }
----------------
probiers mal vl damit. ich hoffe es funktioniert.

Autor: Christian Buntrock (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
erstmal vielen dank für eure posts.
@Schoaschi: lol^^ thx. darauf hätte ich auch ma kommen sollen. habs
zwar noch nich gestet, aber sieht irgendwie total logisch aus das
ganze^^. aua das tut weh :)

werd gleich mal testen :)


thx!!!
cu

Autor: Schoaschi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
gern geschehen :-)... hab früher auch immer die einfachsten wege
übersehen ;-)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.