Forum: Mikrocontroller und Digitale Elektronik ATmega8 PB1 funktioniert nicht


von IS P. (isp)


Lesenswert?

Hallo zusammen,

leider tut dieser sehr einfache Code:
1
#include <avr/io.h>
2
3
int main(void)
4
{
5
  TCCR1A = 0;
6
  TCCR1B = 0;
7
  DDRB = 255;
8
  PORTB = 255;
9
  
10
    while(1)
11
    {
12
        
13
    }
14
}

auf meinem ATmega8 nicht das was er soll. Es werden alle Pins des Ports 
B auf High gesetzt, mit Ausnahme von PB1. Ich hatte dieses Problem schon 
mal bei einem ATmega8, soweit ich mich erinnern kann hing das Problem 
mit dem Timer 1 zusammen, da PB1 gleichzeitig mit OC1A belegt ist. Ich 
meine damals EINMALIG irgendein Register zurückgesetzt zu haben, nachdem 
der Code einmal auf dem ATmega lief, war dieses zurücksetzen nicht mehr 
nötig (im Code ist zu sehen, dass ich die beiden Control Register von 
Timer 1 schon auf 0 gesetzt habe, leider ohne Erfolg). Da ich diesen 
ATmega aber gestern zerschossen habe und einen neuen genommen habe, geht 
es leider wieder nicht.

Jemand eine Idee?

Vielen Dank
ISP

von spess53 (Gast)


Lesenswert?

Hi

>Ich hatte dieses Problem schon
>mal bei einem ATmega8, soweit ich mich erinnern kann hing das Problem
>mit dem Timer 1 zusammen, da PB1 gleichzeitig mit OC1A belegt ist.

Nach einem Reset ist der Timer deaktiviert. Also TCCR1A und TCCR1B *sind 
* auf Null. Daran kann es also nicht liegen.

MfG Spess

von devnull (Gast)


Lesenswert?

Compileroptimierung deaktiviert?

von IS P. (isp)


Lesenswert?

An der Compileroptimierung scheint es nicht zu liegen. Steht auf O1, 
habe sie allerdings schon komplett ausgestellt bzw. auf Os, also maximal 
gestellt.
Bringt keine Verbesserung...

lg
ISP

von Markus W. (Firma: guloshop.de) (m-w)


Lesenswert?

Ich würde mir die eigens aus dem Mikrocontroller gelesene und 
disassemblierte .hex-Datei anzeigen lassen. Wenn die ok ist, dann ist 
wahrscheinlich der ATmega8 beschädigt. Oder du hast den Pin verwechselt, 
was ich jetzt mal nicht glaube.

von Mal schauen (Gast)


Lesenswert?

IS P. schrieb:
> #include <avr/io.h>
>
> int main(void)
> {
>   TCCR1A = 0;
>   TCCR1B = 0;
>   DDRB = 255;
>   PORTB = 255;
>
>     while(1)
>     {
>
>     }
> }

Hab das mal auf einem ATmega32 getestet und was soll ich sagen, funzt so 
wie es soll. Sollte auch auf einem Atmega8 funktionieren leider hab ich 
gerade keinen.
Vllt solltest du mal die Fuses checken was da eingestellt ist.

von devnull (Gast)


Lesenswert?

Woher hast du den ATmega bezogen?
Mittlerweile gibt es ja mehrere Nachbauten, vielleicht hast du einen 
"gefälschten" ?

von Dietrich L. (dietrichl)


Lesenswert?

Kurzschluss am Portpin?

von IS P. (isp)


Lesenswert?

ich traue mich gar nicht es zu sagen...
Auf der Steckplatine scheint die Reihe auf der PB1 steckt keine 
Verbindung mehr zu haben.

Vielen Dank für eure Bemühungen
ISP

von spess53 (Gast)


Lesenswert?

Hi

>Auf der Steckplatine scheint die Reihe auf der PB1 steckt keine
>Verbindung mehr zu haben.

Deswegen sollte man in solche Fällen auch direkt am Pin messen.

MfG Spess

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.