Atmega16 steuert nicht alle Pins an

OP #2253167
Lesenswert?

Hallo,
Ich habe mit einem Atmega16 eine kleine Schaltung zusammengebastelt, 
welche auch eine Multiplex-/Segment Anzeige beinhaltet.

Leider steuert mir der Amtega 2 Ports nicht an. Da ich den Atmega auch 
schon ausgetauscht habe, denke ich, dass es ein Softwarefehler ist.
PC2 und PC3 werden leider nicht angesteuert PC0 und PC1 funktionieren 
jedoch einwandfrei.

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

4
int main (void);
5

6
void delay_ms(uint16_t ms)
7
{
8
  for(uint16_t t=0; t<=ms ; t++)
9
  {
10
    _delay_ms(1);
11
  }
12
}
13

14
const int8_t numbers[1] =
15
{
16
    0b000000000,
17
};
18

19
void digit (uint8_t wert, uint8_t pin)
20
{
21
  PORTC |= (1 << PC0) | (1 << PC1) | (1 << PC2) | (1 << PC3);
22

23
  PORTB = numbers[wert];
24
  PORTC &= ~(1 << pin);
25
  delay_ms(100);
26
}
27

28
int main()
29
{
30
  DDRB = 0xFF;
31
  DDRC |= (1 << DDC0) | (1 << DDC1) | (1 << DDC2) | (1 << DDC3);
32
  PORTC |= (1 << PC0) | (1 << PC1) | (1 << PC2) | (1 << PC3);
33

34
  while(1)
35
  {
36
    digit(1, PC0);
37
    digit(1, PC1);
38
    digit(1, PC2);
39
    digit(1, PC3);
40
  }
41
  return 0;
42
}

Hoffe ihr könnt mir helfen, Daniel
#2253227
Lesenswert?

nach Möglichkeit würde ich diese Pins gar nicht verwenden, dann hast du 
später noch die Möglichkeit per JTAG zu debuggen. Außerdem brauchst du 
kein Risiko eingehen etwas zu verfusen.

Am Programmstart würde ich eine Wartezeit von einigen Sekunden 
programmieren, wenn an einem Bestimmten Pin ein Signal anliegt bleibt 
JTAG an, wenn nicht wird JTAG ausgeschaltet.
Gast #2253264
Lesenswert?

Hi

>Wäre nett, wenn jemand einen passenden Codeschnipsel(in C) für mich
>hätte.

Was verstehst du an dem Satz:

The application
software must write this bit to the desired value twice within four 
cycles to change its value

nicht? Wenn du das nicht allein schaffst, hast du das falsche Hobby.

MfG Spess
#2253268
Lesenswert?

Daniel Stein schrieb:
> Wäre nett, wenn jemand einen passenden Codeschnipsel(in C) für mich
> hätte.
>

Wofür?
Für das Löschen der JTAGEN Fuse?

Die sind nicht im C-Code.
Da musst du dein Brennprogramm durchforsten, wie und wo man da die Fuses 
vom µC lesen kann. Dann stellst du die JTAGEN Fuse um und brennst die 
Fuses wieder in den µC.
Das hat erst mal nichts damit zu tun, wie man ein Programm auf den µC 
brennt. Das ist sozusagen der Mechanismus, mit dem man den µC an sich 
konfiguriert. Und es ist sehr enmpfehlenswert, wenn du weißt wie das in 
deinem Brennprogramm funktioniert, denn zum Umstellen der µC 
Taktfrequenz wirst du dieses Wissen ebenfalls benötigen. Daher bringt es 
auch nichts, wenn du die JTAGEN Fuse per Programm abstellst (was 
tatsächlich möglich wäre).

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