www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Datentransfer von Port C an Port D


Autor: Fuzzy Fuzzy (fuzzy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe ein Problem mit einem Datentransfer von Port C an Port D.
Zur Info: Ich habe einen ATmega 16 und habe ihn mit WinAVR Programmiert.
Wenn ich nun von Port C eine Zahl bekomme z.B. 15 oder so dann bekomme 
ich diesen nicht an Port D zurückgesand. Das JTAG habe ich abgeschaltet. 
Weiss langsam nicht mehr weiter.
Für Hilfreiche Tipps Danke ich im vorraus!!!

PS: Wenn in anderen Foren Tipps stehen dann her damit, habe schon 
gesucht aber nichts richtiges gefunden!

Hier mein Quelltext:

#include<avr/io.h>
#include<inttypes.h>
int main (void)
{

  MCUCSR = (1<<JTD);
  MCUCSR = (1<<JTD);
  DDRA = 0x00;     //port A input
  DDRB = 0xFF;      // port B output
  DDRC = 0x00;    // port C input
  //PORTC= 0x00;
  PINC=0x00;
  DDRD = 0xFF;


  int x = 0;
  unsigned char Bsend;
  int B,C,g,Pcdaten;
  TWCR = (0<<TWEN);
  ASSR = (0<<AS2);
  ADCSRA = (1<<ADEN) | (1<<ADPS2) | (1<<ADPS1) | (1<<ADPS0);
  ADMUX = 0;
  ADMUX = (1<<REFS1) | (1<<REFS0);
  // Select pin ADC0 using MUX
  // Activate ADC with Prescaler 128 -->16Mhz/128 = 125kHz

  //Start conversion
    ADCSRA |= (1<<ADSC);
  // wait until converstion completed
   while (ADCSRA & (1<<ADSC) )

  for (;;) {
  ADCSRA |= (1<<ADSC);
  while (ADCSRA & (1<<ADSC) )
    // get converted value
    x = ADCW;

    x = x>>2;          //Shiften um 2 Stellen nach rechts

   Bsend = x & 0b00001111;
   PORTB = Bsend;


  Bsend = x & 0b11110000;
  Bsend=Bsend>>4;
  Bsend = Bsend + 128;
  PORTB = Bsend;

  Pcdaten = PORTC;
  PORTD=PORTC;
 // Pcdaten = Pcdaten*10;
 //  Pcdaten = 200;

   if (PIND &b00000010)      //pind.2==1
   {
      Pcdaten = Pcdaten + 10;
  }

   if (PIND &b00000100)        //pind.3==1
   {
      Pcdaten = Pcdaten - 10;
  }


  C = 500;

    B = C - Pcdaten;

    g = 0;

// Anschalten der LED
  //PORTD &= ~(1<<PD5);
   PORTD =0b01111111;

   while (g < Pcdaten)
  {
   asm volatile("nop\n\t"
             ::);

       g = g + 1;
  }
 // Ausschalten der LED

PORTD=0;
   //PORTD |= (1<<PD5);
   PORTD = 0b00000000;
   g = 0;

  while (g < B)
  {
   asm volatile("nop\n\t"
             ::);

       g = g + 1;
  }

  }
  ADCSRA &= ~(1<<ADEN);

int i;
i=0;

  for(i=0;i<255;i++)
  {

  asm volatile("nop\n\t"
             ::);
  PORTD=i;
}
}


Autor: Sonic (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
PORTC => Ausgangsregister
PINC => Eingangsregister
Du hast das ein paarmal durcheinandergebracht, glaub' ich.

Pcdaten = PORTC;
  PORTD=PORTC;

Hier liest du das Ausgangsregister ein, sollte wohl eher PINC heißen, 
oder?

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.