LED problem - ein Port geht, anderer nciht

OP #1089603
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.
#1089611
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
Persönliche Seite #1089629
Du brauchst ZWEI Register:

DDRD und PORTD. DDRD für die Einstellung PORTD ist Ausgabe und PORTD für 
die Ausgabe an sich.
1
#ifndef F_CPU
2
#define F_CPU 8000000UL
3
#endif
4

5
#include <avr/io.h>
6
#include <util/delay.h>
7
#include <stdint.h>
8

9
#define ledport_richtung DDRD
10
#define ledport PORTD
11
#define ledbit 1
12

13
void my_delay(uint8_t x)
14
{
15
  uint8_t y;
16
  for (y=0;y<=x;y++)
17
  {
18
    _delay_ms(1);
19
  }
20

21
}
22

23
void blinken(uint8_t a)
24
{
25
  while(1)
26
  {
27
    ledport |= (1<<ledbit);
28
    my_delay(a);
29
    ledport &= ~(1<<ledbit);
30
    my_delay(a);
31
  }
32
}
33

34
int main(void)
35
{
36
  ledport_richtung = 0xff; /* Output */
37
  blinken(254);
38
}

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:
1
void blinken(uint8_t a)
2
{
3
  ledport |= (1<<ledbit);
4
  my_delay(a);
5
  ledport &= ~(1<<ledbit);
6
  my_delay(a);
7
}
8

9
int main(void)
10
{
11
  ledport_richtung = 0xff; /* Output */
12
  while(1)
13
  {
14
    blinken(254);
15
  }
16
}

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.