mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik LED problem - ein Port geht, anderer nciht


Autor: Johann T. (joschua011)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guten Tag,
ich habe ein kleines Problem und finde den Fehler nicht...
ich habe 5 Led an Port D (0,1,3,4,5) meines Atmega8
und 1 Led an PC5 angeschlossen.
und zwar so
ATmegapin ---> Wiederstand ---> Led --> GND  (active High )
Led sind alle richtig drinn habs mit Netzgerät ausprobiert.
wenn ich jz die PC5 led zum blinken brigen will, geht das,
bei den restlichen allerdings nicht.......

Hier der code:

#ifndef F_CPU
#define F_CPU 8000000UL
#endif

#include <avr/io.h>
#include <util/delay.h>
#include <stdint.h>

#define ledport DDRC
#define ledbit 5



void my_delay(uint8_t x)
{
  uint8_t y;
  for (y=0;y<=x;y++)
  {
    _delay_ms(1);
  }

}

void blinken(uint8_t a)
{
  while(1)
  {
    ledport |= (1<<ledbit);
    my_delay(a);
    ledport &= ~(1<<ledbit);
    my_delay(a);
  }

}


int main(void)
{

  ledport = 0xff; /* Output */
  blinken(254);
}


bitte um hilfe, danke.

Autor: Michael U. (amiga)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

irgendwie verstehe ich jetzt Deine Frage nicht.
Du postetst ein Programm, daß die LED an PC5 blinkem lässt und schreibst 
dazu, daß das so funktioniert.
Wobei sollen wir Dir nun helfen?

Das Programm für die anderen LEDs anpassen oder was?

Gruß aus Berlin
Michael

Autor: Axel Düsendieb (axel_jeromin) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
1. Fusebit JTAG löschen
2. Avcc an 5V
3. Widerstand ohne ie schreiben.

Axel

Autor: Roland Praml (pram)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ist das evtl der JTAG-Port? der muss nämlich per Fuse deaktiviert 
werden.

EDIT: war wieder einer schneller ;-)

Autor: Beitragleser (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Axel, @Roland:

Lest ihr eigentlich auch die Artikel, auf die ihr antwortet? Johann 
verwendet einen ATMega8, der hat kein JTAG.

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du brauchst ZWEI Register:

DDRD und PORTD. DDRD für die Einstellung PORTD ist Ausgabe und PORTD für 
die Ausgabe an sich.

#ifndef F_CPU
#define F_CPU 8000000UL
#endif

#include <avr/io.h>
#include <util/delay.h>
#include <stdint.h>

#define ledport_richtung DDRD
#define ledport PORTD
#define ledbit 1

void my_delay(uint8_t x)
{
  uint8_t y;
  for (y=0;y<=x;y++)
  {
    _delay_ms(1);
  }

}

void blinken(uint8_t a)
{
  while(1)
  {
    ledport |= (1<<ledbit);
    my_delay(a);
    ledport &= ~(1<<ledbit);
    my_delay(a);
  }
}

int main(void)
{
  ledport_richtung = 0xff; /* Output */
  blinken(254);
}

Hast du nur die LEDs angeschlossen oder auch noch einen 
RS232-Pegelwandler - PD1 an PORTD ist ja TXD der UART. Gehen alle LEDs 
an PORTD nicht, d.h. PD0 bis PD5?

Der Atmega8 hat keinen JTAG, der da zu berücksichtigen wäre.

Johann, nutze die Formatierung des Forums für Quellcode. Es sieht 
schöner aus und ist besser lesbar.

Und noch eine Anmerkung: Es ist ein sehr ungewöhnlicher Stil, wenn man 
die Endlos-while-Schleife in eine Unterfunktion steckt. Der alte Hase 
erwartet die in main(), also z.B. so:

void blinken(uint8_t a)
{
  ledport |= (1<<ledbit);
  my_delay(a);
  ledport &= ~(1<<ledbit);
  my_delay(a);
}

int main(void)
{
  ledport_richtung = 0xff; /* Output */
  while(1)
  {
    blinken(254);
  }
}

Autor: Johann T. (joschua011)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
vielen Dank stefan,
hat mir sehr geholfen!!!!!!!!!!

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.