Atmega8: Lauflicht über die Pins PDn und PBn

Gast #2746198
Lesenswert?

Hallo,

ich veruche gerade die Pins PD00 - PD07 und PB00 - PB07 anzusprechen. 
Dazu habe ich das folgende C-Programm geschrieben, was allerdings gar 
nichts an den Ausgängen macht. Sieht jemand den Fehler? Würde mich 
freuen ;-)

Gruß Thomas

Hier das Programm:
1
#include <avr/io.h>
2
#include <util/delay.h>
3

4
void writeB(int num)
5
{
6
  DDRB = num;
7
}
8
void writeD(int num)
9
{
10
  DDRB = num;
11
}
12

13
int main()
14
{
15
  // Port B = LED; Port D = Taster
16
  
17
  DDRB = 0xff;
18
  DDRD = 0xff;
19
  PORTD = 0xff;
20
  PORTB = 0xff;
21
  
22
  while(1)
23
  {
24
    writeD(0x01);
25
    _delay_ms(350);
26
    writeD(0x02);
27
    _delay_ms(350);
28
    writeD(0x04);
29
    _delay_ms(350);
30
    writeD(0x08);
31
    _delay_ms(350);
32
    writeD(0x10);
33
    _delay_ms(350);
34
    writeD(0x20);
35
    _delay_ms(350);
36
    writeD(0x40);
37
    _delay_ms(350);
38
    writeD(0x80);
39
    _delay_ms(350);
40
    
41
    writeB(0x01);
42
    _delay_ms(350);
43
    writeB(0x02);
44
    _delay_ms(350);
45
    writeB(0x04);
46
    _delay_ms(350);
47
    writeB(0x08);
48
    _delay_ms(350);
49
    writeB(0x10);
50
    _delay_ms(350);
51
    writeB(0x20);
52
    _delay_ms(350);
53
    writeB(0x40);
54
    _delay_ms(350);
55
    writeB(0x80);
56
    _delay_ms(350);
57
  }
58
}
Gast #2746226
Lesenswert?

Danke erst einmal für die Tipps! Habe die Fehler nun korrigiert, 
allerdings tut sich noch immer nichts, weder am Port B noch am Port D...

Hier nun der korrigierte Code:
1
#include <avr/io.h>
2
#include <util/delay.h>
3

4
void writeB(unsigned char num)
5
{
6
  PORTB = num;
7
}
8
void writeD(unsigned char num)
9
{
10
  PORTD = num;
11
}
12

13
int main()
14
{
15
  // Port B = LED; Port D = Taster
16
  
17
  DDRB = 0xff;
18
  DDRD = 0xff;
19
  PORTD = 0xff;
20
  PORTB = 0xff;
21
  
22
  while(1)
23
  {
24
    writeD(0x01);
25
    _delay_ms(350);
26
    writeD(0x02);
27
    _delay_ms(350);
28
    writeD(0x04);
29
    _delay_ms(350);
30
    writeD(0x08);
31
    _delay_ms(350);
32
    writeD(0x10);
33
    _delay_ms(350);
34
    writeD(0x20);
35
    _delay_ms(350);
36
    writeD(0x40);
37
    _delay_ms(350);
38
    writeD(0x80);
39
    _delay_ms(350);
40
    
41
    writeB(0x01);
42
    _delay_ms(350);
43
    writeB(0x02);
44
    _delay_ms(350);
45
    writeB(0x04);
46
    _delay_ms(350);
47
    writeB(0x08);
48
    _delay_ms(350);
49
    writeB(0x10);
50
    _delay_ms(350);
51
    writeB(0x20);
52
    _delay_ms(350);
53
    writeB(0x40);
54
    _delay_ms(350);
55
    writeB(0x80);
56
    _delay_ms(350);
57
  }
58
}
(Firma: Atelier Klippel) #2746266
Lesenswert?

Schalplan? Layout? Aufbau? Alles richtig konfiguriert? Richtige Spannung 
angelegt? Richtigen Oszillator ausgewählt? ....

Sorry, meine Glaskugel ist grad in Reparatur.

Grüße,

Chris

Edit: So benutzt Du z.B. eine delay() Funktion. Woher aber weiss die 
Funktion denn die Taktgeschwindigkeit des µC? Wird da normalerweise 
nicht irgendwo ein #define eingebaut um das anzugeben?
Gast #2746294
Lesenswert?

Christian Klippel schrieb:
> Schalplan? Layout? Aufbau? Alles richtig konfiguriert? Richtige Spannung
> angelegt? Richtigen Oszillator ausgewählt? ....

Den einzigen Schaltplan, an den ich mich orientiert habe bzw. den ich 
vorzeigen kann, ist der folgende: 
http://www.mikrocontroller.net/wikifiles/f/f6/Mega8_Tutorial.png
Und nach dieser Schaltung die Low-Current-LEDs an die oben genannten 
Pins drangelötet: http://www.mikrocontroller.net/wikifiles/b/bb/Led.gif

Was meinst du mit "Layout"? Das Platinenlayout? Ich habe einfach eine 
Lochrasterplatine genommen und die Pins und Bautelemente nach dem 
Schaltplan zusammengelötet.

Die restlichen Antworten kann ich mit Ja beantworten, denn 
Assembler-Code (alle LEDs anschlaten) läuft problemlos. Daher denke ich, 
dass das Problem im C-Code liegen muss.

Christian Klippel schrieb:
>
> Edit: So benutzt Du z.B. eine delay() Funktion. Woher aber weiss die
> Funktion denn die Taktgeschwindigkeit des µC? Wird da normalerweise
> nicht irgendwo ein #define eingebaut um das anzugeben?

Danke! Das war's. Der folgende Codeschnippsel hat am Anfang des Skrpts 
gefehlt:
1
#define F_CPU 4000000

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren