www.mikrocontroller.net

Forum: Compiler & IDEs Eingang direkt auf Ausgang geben


Autor: ich (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

ich habe ein Problem mit meinen C-code!

    if (bit_is_set(PINC,Rot_Eingang))
       {bit_on(PORTC,Rot_Ausgang);}
       else {bit_off(PORTC,Rot_Ausgang);}
    if (bit_is_set(PINC,Gruen_Eingang))
       {bit_on(PORTC,Gruen_Ausgang);}
       else {bit_off(PORTC,Gruen_Ausgang);}
    if (bit_is_set(PINC,Blau_Eingang))
       {bit_on(PORTC,Blau_Ausgang);}
       else {bit_off(PORTC,Blau_Ausgang);}
oder
               uint8_t x;
    x= PINC;
    x *=8;
    PORTC = x;

MEGA8 8MHZ;
würde gerne ein Eingangssignal direkt durch µC auf einen Ausgang
leiten um das Eingangsignal zu überwachen und dann bestimmte Aktionen
an den Ausgangspins auszugeben.

Habe aber jetzt das Problem wenn ich die Frequenz am Eingang immer 
weiter hoch drehe beginn ab einer Frequenz von 200 bis 300Hz  ein doppel 
trg
auf dem Ausgang.

ist der µC zu langsam?

hätte jemand eine Idee ob und wie das Funktionieren könnte?

Danke!

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du willst Eingangspin => Ausgangspin?
if ( PIND & (1<<PD3) )
{
  PORTB |= (1<<PB7);
}
else
{
  PORTB &= (1<<PB7)
}

Autor: ich (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja will Eingangspin gleich Ausgangspin!

                if (bit_is_set(PINC,PC0))
       {bit_on(PORTC,PC4);}
       else {bit_off(PC4);}
    if (bit_is_set(PINC,PC1))
       {bit_on(PORTC,PC5);}
       else {bit_off(PORTC,PC5);}
    if (bit_is_set(PINC,PC2))
       {bit_on(PORTC,PC6);}
       else {bit_off(PORTC,PC6);}
aber so habe ich eben doppel trg. am Ausgang bei höheren Frequenzen
hätte gerne ein sauberes Signal am Ausgang.

Autor: nils (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
asm("mov ziel, quelle");

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>doppel trg. am Ausgang

Was soll das sein?


>sauberes Signal am Ausgang

Hast du mit meinem Beispiel.


>asm("mov ziel, quelle");

Kann keine Bits kopieren

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast du vielleicht die Endlosschleife drumrum vergessen?  Sonst wird
das ja nur ein einziges Mal abgearbeitet nach Reset.

Mach mal Nägel mit Köpfen: komplettes Programm, welcher Controller,
welcher Compiler, vielleicht auch gleich noch das Makefile mit dazu.

Autor: SoLaLa (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich will ja auch C lernen :-)
mein Gedankenansatz dazu sähe so aus:

PORTC=(((PINC&7)<<4)|(PINC&143))    //PC0,1,2,3,7 unverändert lassen

würde das so funktionieren?

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja.

Behalte aber mal im Hinterkopf, dass du im Ausdruck zwei 
Einleseoperationen an PINC hast und sich die Pegel zwischen den Aktionen 
ändern können.

Lesbarer kann man die Bitmanipulation mit der 1<<Bitnummer 
Schreibweise schreiben.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich wrote:

> aber so habe ich eben doppel trg. am Ausgang bei höheren Frequenzen
> hätte gerne ein sauberes Signal am Ausgang.

Dann mußt Du uns erstmal den Rest des Programms zeigen, in den gezeigten 
Zeilen liegt der Fehler jedenfalls nicht.


Aber es wird eh kaum klappen, 3 PWMs jitterfrei durch nen MC 
durchzuschleifen, wenn er auch noch was anderes machen soll.


Peter

Autor: ich (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
OK


Dann wird es wohl nicht klappen mit höheren Frequenzen ,werde dann nur 
bis 200Hz PWM gehen ums durchzuschleifen .

Das reicht mir dann aus !


Jörg Wunsch es ist eine Endlosschleife drum!soviel dazu!!!

Auszug:
int main(void)
{
   init_devices();
   uint16_t Signalpegel=0;
  bit_on(TIMSK,TOIE1);
 while(1)
 {
 //------------------------------High------------------------------------ 
---------
  if ((bit_is_set(PIND, PD2)) && (bit_is_set(PIND,PD3))) //High
  {

  RGB();
  Signalpegel = AdcWert(6);
        Summe(Signalpegel);

  }
//-------------------------------middle--------------------------------- 
--------
  if ((bit_is_clear(PIND, PD2)) && (bit_is_set(PIND,PD3))) //middle
  {

  RGB();
  Signalpegel = AdcWert(6);
        Summe(Signalpegel);

  }
//-------------------------------low------------------------------------ 
---------
  if ((bit_is_set(PIND, PD2)) && (bit_is_clear(PIND,PD3))) //low
  {
        RGB();
  Signalpegel = AdcWert(6);
        Summe(Signalpegel);
  }
//------------------------------Test------------------------------------ 
---------
  if ((bit_is_clear(PIND, PD2)) && (bit_is_clear(PIND,PD3))) //Test
  {
  Test();
  }
 }
}
//--------------------------------------------------------------------
void RGB(void)
{
    if (bit_is_set(PINC,PC0))
       {bit_on(PORTC,PC4);}
       else {bit_off(PC4);}
    if (bit_is_set(PINC,PC1))
       {bit_on(PORTC,PC5);}
       else {bit_off(PORTC,PC5);}
    if (bit_is_set(PINC,PC2))
       {bit_on(PORTC,PC6);}
       else {bit_off(PORTC,PC6);}
}

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.