Atmega8 Pin defekt?

OP #3046051
Lesenswert?
• ▲
▼
Hallo Leute,

ich erzeuge mit dem Atmega8 und dem Timer1 ein Taktsignal (T = 0,2ms Ton 
= 0,1ms). Dazu habe ich den Timer so eingestellt das es alle 0,1ms zu 
einem Overflow kommt und die entsprechende ISR aufgerufen wird. In 
dieser ISR toggle ich die Pins PD6 und PD7 (Beide als Ausgang 
geschaltet). Analog Comperator habe ich explizit deaktiviert. An die 
Ausgänge ist soweit noch nichts angeschlossen, nur das Oszi (anbei das 
Bild).

PD7 im Bild die untere Wellenform
PD6 im Bild die obere Wellenform

Sieht wohl danach auch das sich der Pin PD7 verabschiedet hat, könnt ihr 
das bestätigen?
Angehängte Dateien:
#3046072
Lesenswert?
• ▲
▼
Patrick L. schrieb:

> Sieht wohl danach auch das sich der Pin PD7 verabschiedet hat, könnt ihr
> das bestätigen?

Das könnte genauso ein nicht auf Ausgang geschalteter Pin sein, dem du 
den Pullup zu und wegschaltest und dessen Ausgangsspannung deshalb durch 
kleine Kapazitäten sich nur langsam abbaut.

So ein µC hält schon ein etwas aus. So schnell ist der nicht hinüber.
Zeig halt mal dein Programm, dann kann man genaueres sagen. Aber aus der 
Erfahrung heraus: in mehr als 95% sitzt das Problem vor dem Bildschirm 
und nicht auf der Platine.
OP #3046095
Lesenswert?
• ▲
▼
Hier mal der Code...
1
ISR(TIMER1_OVF_vect)
2
{
3
  TCNT1 = -50; // overflow every 0,1ms
4
  PORTD ^= (1 << PD6);
5
  PORTD ^= (1 << PD7);
6
}
7

8
int main(void)
9
{
10
  cli(); // disable global interrupts
11

12
  DDRD |= (1 << DDD6) | (DDD7); // PD6, PD7 as Output
13

14
  ACSR = (1 << ACD); // disable analog comperator
15

16
  // initialization
17
  initTimer1();
18
  
19
  sei(); // enable global interrupts
20

21
  while(1)
22
  {
23
  }
24
}
25

26
void initTimer1(void)
27
{
28
  // timer 1
29
  TCCR1A = 0; // No Compare Output Mode or Waveform Generation
30
  TCCR1B = (1 << ICNC1) | (1 << CS11); // Input Capture Noise Canceler, Falling Edge,  Vorteiler 8 -> 4MHz / 8 = 500kHz Timer Frequenz 
31
  TCNT1 = -50; // Timer Register wird mit einem Wert vorbelegt
32
  TIMSK = (1 << TICIE1) | (1 << TOIE1); // Input Capture Interrupt Enable, Overflow Interrupt Enable 
33
}
#3046152
Lesenswert?
• ▲
▼
Noch eine Kleinigkeit: Die beiden Befehle
1
PORTD ^= (1 << PD6);
2
PORTD ^= (1 << PD7);
kannst Du auch in einer Anweisung machen:
1
PORTD ^= (1 << PD6) | (1 << PD7);
Dann passiert es gleichzeitig statt kurz nacheinander.

Außerdem wäre der CTC-Modus des Timers geeigneter. Dann kannst Du Dir 
das Laden des Counter-Registers sparen.

Antwort schreiben

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.

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.