[Attiny13P] Komisches Verhalten.

Gast #3073521
Lesenswert?

Guten Morgen zusammen...

Ich habe ein kleines Problem mit meinem Tiny13P...

Und zwar sieht die Sache so aus:

Angefangen zu Programmieren habe ich mit Bascom. Dort habe ich ein 
einfaches Lauflicht programmiert und dies funktionierte nach dem Flashen 
auch so, wie man es erwartet.

Doch jetzt bin ich zu AVRStudio5 gewechselt, weil ich plane auch andere 
Chips zu nutzen mit mehr als 4kb Speicher (begrenzung in Bascom).

Den Lauflichtcode habe ich also im Studio neu geschrieben. Funktioniert 
auch tadellos.

Jedoch macht mir eine Kleinigkeit Sorgen...

5V beziehe ich via USB-Adapter von meinem Computer. Plus und Minus gehen 
auf mein Steckbrett mit der Schaltung. Die 4 LEDs für das Lauflicht sind 
an PB1 - PB4 (PB4 = LED1 -> PB1 = LED4) mit der Anode gesteckt. Kathode 
geht folglich auf Minus. Zwischen Plus und Minus des Tinys ist ein 100n 
Kondensator. Pin8 und Pin1 des Tinys sind auch verbunden.
Minus des Tinys ist NICHT angeschlossen, Plus schon. Die 4 LEDs leuchten 
minimal. Das Programm des Tinys läuft nicht. BOD ist auf 4,xV 
eingestellt.
PB0 ist als Eingang definiert, Pull-Up Widerstand ist an auf PB0. dran 
hängt ein Taster der gegen GND zieht. Drücke ich diesen Taster blinken 
die LEDs gleichzeitig im Takt.

Stecke ich den Minus vom USB dazu, läuft alles wunderbar.

Nun stellt sich mir die Frage ob das an meinem Steckbrett liegt, am 
USB->Steckbrett"adapter", am Programm auf dem Tiny oder ob das "normal" 
ist.

einige weitere Infos zum Programm:

#ifndef F_CPU
#define F_CPU 1000000UL                      //CPU-Takt setzen (1MHZ)
#endif

#include <avr/io.h>                        //standart
#include <util/delay.h>                      //_delay_ms(x) Funktion 
nutzen

void sleep(uint16_t ms) {                    //---------------
    for (; ms>0; ms--) _delay_ms(1);              //Sleep-Funktion
}                                //---------------

void rundlicht() {                        //---------------
    PORTB = 0b00010001;                    //LED1 an
    sleep(200);                      //warte DELAY ab
    PORTB = 0b00001001;                    //LED2 an
    sleep(200);                      //warte DELAY ab
    PORTB = 0b00000101;                    //LED3 an
    sleep(200);                      //warte DELAY ab
    PORTB = 0b00000011;                    //LED4 an
    sleep(200);                      //warte DELAY ab
}

int main(void)
{
  DDRB  = 0b00011110;
    PORTB = 0b00000001;
  sleep(100);                          //Pull-Up setzen lassen

while (1)
{
rundlicht();
}

}
#3073587
Lesenswert?

Florian schrieb:
> Programmer ist nicht mit angeschlossen... ich muss den Tiny immer hin
> und her stecken :P
An deinem Controller hängt Plus. Da GND nicht angeschlossen ist, verhält 
der sich jetzt wie ein Vorwiderstand für die Leds, die an den Ports und 
mit der anderen Seite an Gnd liegen. Dann fliesst ein kleiner Stom, der 
die Leds glimmen lässt.

mfg.
#3073596
Lesenswert?

Florian schrieb:
> Grade rausgefunden dass alle LEDs zusammen leuchten wenn ich 5V an PB0
> lege ... sollte auch nicht so sein oder`?
Jetzt hör auf da sinnlos mit rumzuspielen. Es werden Plus und GND 
angeschlossen und dann funktioniert es. Basta.
Irgendwelche Pins nicht anzuschliessen und sich dann darüber zu wundern, 
was gerade passiert, wenn man hier oder da mit irgendeinem Potential 
rangeht, ist einfach nur Blödsinn.

Und ja, es liegt an der internen Beschaltung der Ports, die Überspannung 
über Dioden ableiten. Das ist kein Phänomen. Siehe Datenblatt 
"IO-Ports".

mfg.

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