Atmega8: Lauflicht über die Pins PDn und PBn

Gast #2746198
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
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
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
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

Eine eigene Frage? Dieser Thread ist über 14 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.