Forum: Mikrocontroller und Digitale Elektronik AtTiny2313 funktioniert im Pollinboard aber nicht in eigener Schaltung


von Mike (Gast)


Lesenswert?

Guten Tag,

Ich bin noch Anfänger und habe folgendes Problem:

ich kann den AtTiny 2313 im Pollinboard ohne Probleme beschreiben. Wenn 
ich dann an den Ausgängen messe haben diese auch den von mir 
zugewiesenen Wert.
inputt: 5,67V
low: 0,69V und high: 5,67V

Wenn ich dann allerdings den AtTiny in meine Schaltung einsetze, haben 
die Ausgänge nicht mehr meine zugewiesenen Werte.
Eingang: 4,92V direkt vom Spannungsregler 7805

und alle Ausgänge haben den Wert: 9x 0,5V; 1x 0,7V und 8x 0,1V

Woran könnte das liegen?


Hier noch das 
Programm...................................................

#include <avr/io.h>
#include <inttypes.h>
#ifndef F_CPU
#warning "F_CPU war noch nicht definiert,wird nun mit 3686400 definiert"
#define F_CPU 3686400UL
#endif
#include <util/delay.h>
#include <stdint.h>

#define PIN7 7
#define PIN6 6
#define PIN5 5
#define PIN4 4
#define PIN3 3
#define PIN2 2
#define PIN1 1
#define PIN0 0

int main (void) {            // (2)

   int x;

   DDRA  = 0x07;             // (3)
   PORTA = 0x00;             // (4)

   DDRB  = 0xff;             // (3)
   PORTB = 0x00;             // (4)

   DDRD  = 0x7f;             // (3)
   PORTD = 0x00;             // (4)

   x=500;

   PORTA &= ~((1 << PIN0) | (1 << PIN1) | (1 << PIN2) );

   PORTB &= ~((1 << PIN0) | (1 << PIN1) | (1 << PIN2) | (1 << PIN3) | (1 
<< PIN4) | (1 << PIN5) | (1 << PIN6)  | (1 << PIN7) );

   PORTD &= ~((1 << PIN0) | (1 << PIN1) | (1 << PIN2) | (1 << PIN3) | (1 
<< PIN4) | (1 << PIN5) | (1 << PIN6));

   //0111 1111

   PORTA |= (1 << PIN2);
   PORTD |= (1 << PIN0);

   while(1) {                // (5a)



   PORTB |= (1 << PIN7);
   _delay_ms(x);
   PORTB &= ~ (1 << PIN7);
   _delay_ms(x);
   PORTB |= (1 << PIN6);
   _delay_ms(x);
   PORTB &= ~ (1 << PIN6);
   _delay_ms(x);
   PORTB |= (1 << PIN5);
   _delay_ms(x);
   PORTB &= ~ (1 << PIN5);
   _delay_ms(x);

     /* "leere" Schleife*/;  // (5b)
   }                         // (5c)

   /* wird nie erreicht */
   return 0;                 // (6)
}

von Stefan B. (stefan) Benutzerseite


Lesenswert?

> meine Schaltung

sieht wie aus? Vielleicht läuft der µC nicht, weil er eine externe 
Taktquelle vermisst, die auf dem Pollinboard vorhanden ist. Oder RESET 
ist und bleibt auf LOW gezogen... Es gibt zig Möglichkeiten.

Sonst fällt mir auf:

Misstraust du den Defaultwerten nach dem RESET bzw. Power-Up? Laut 
Datenblatt sind die DDRx gleich , d.h. als Eingänge geschaltet und die 
PORTx Register stehen auf 0. Die muss man nicht extra nullen.

> int x;
> x = 500;
> _delay_ms(x);

"In order for these functions (d.h. _delay_ms und _delay_us) to work as 
intended, compiler optimizations must be enabled, and the delay time 
must be an expression that is a known constant at compile-time."
http://www.nongnu.org/avr-libc/user-manual/group__util__delay.html

Ich kann nicht aus dem Stegreif sagen, ob der Compiler merkt, dass x zum 
Zeitpunkt des Übersetzens eine Konstante ist und bleibt. Sicherer ist:

  _delay_ms(500);

Oder

#define WARTEZEIT_IN_MS 500
  _delay_ms(WARTEZEIT_IN_MS);

von Mike (Gast)


Angehängte Dateien:

Lesenswert?

Ich wollte den reset Pin eigentlich auch als Ausgang nutzen. Ist das 
möglich?
Ich möchte in dieser Schaltung gerne erst einmal alle Pins als Ausgänge 
benutzen.

Eine externe Taktquelle gibt es nicht. Hat der AtTiny sowas nicht 
intigriert?

Das mit der Variablen x habe ich so schonmal bei einem Mega8 benutzt wo 
ich auch x=x+1 benutzt habe. Das hatte soweit funktioniert (nur im 
pollinboard getestet).

Ich gehe jetzt mal davon aus das es an der Taktquelle liegt. Muss ich da 
dann einen Quarz benutzen und kann ich da nicht einen der Integrierten 
benutzen?

So und Schaltung ist nun mit dabei :)

Danke für deine Antwort schonmal

von spess53 (Gast)


Lesenswert?

Hi

>Ich gehe jetzt mal davon aus das es an der Taktquelle liegt. Muss ich da
>dann einen Quarz benutzen und kann ich da nicht einen der Integrierten
>benutzen?

Nein.Ja. Aber du solltest die richtige Taktquelle aktivieren.

MfG Spess

von Stefan B. (stefan) Benutzerseite


Lesenswert?

 Taktquelle 

Die Frage wäre höchstens: Hast du den Attiny2313 jemals auf externe 
Taktquelle umgestellt oder nicht, also ist der noch fabrikneu?

Wenn fabrikneu, dann ist die interne Taktquelle aktiv und es wird keine 
externe Taktquelle benötigt. Wenn auf extern umgestellt war und nicht 
auf intern zurückgestellt wurde, dann wird die externe Taktquelle weiter 
benötigt. Deine Schaltung hat keine externe Taktquelle. Dann wäre klar, 
dass der µC nicht läuft.

Bei deiner Unkenntnis bzgl. Taktquelle hast du daran wahrscheinlich noch 
nie gedreht. Wenn es auch kein anderer gemacht hat, dann spielt dieses 
Thema wohl keine Rolle. Eher auf den Reset konzentrieren.

 Reset 

Der Resetpin PA2 muss von aussen einen HIGH Pegel bekommen, damit der µC 
anläuft. Das kann man mit einem externen ~10K Pullup-Widerstand machen 
oder man kann den rel. hochohmigen internen Pullupwiderstand dafür 
verwenden. Beide Methoden sorgen für einen sauberen HIGH Pegel am 
Resetpin.

Du hast aber am Resetpin PA2 über einen rel. niederohmigen 
Basiswiderstand von 1,8k die Basis eines Transistors angeschlossen. Das 
ist in Verbindung mit dem schwachen internen Pullup des Resetpins so gut 
wie eine Verbindung zu GND (OK nicht zu GND sondern zu U_BE ca. 0.7V). 
Der wenige Strom durch den internen Pullup ist ratzfatz durch den 
Basiswiderstand entfleucht. Der Resetpin sieht einen LOW Pegel. Der µC 
startet nicht.

Du hast so viele Pins frei, ich sehe nur Nachteile, wenn du ausgerechnet 
den Resetpin PA2 als I/O Pin verwendest.

Wenn du den Resetpin allerdings schon als IO-Pin umgefust hast... kannst 
du das mit dem Pollinboard sowieso nicht mehr zurück ändern. Dann musst 
du schauen was mit dem µC im Istzustand noch anzustellen ist.

Du schreibst, dass die Schaltung auf dem Pollinboard funktioniert hat. 
Wenn das tatsächlich mit dem Basiswiderstand und dem Transistor war, 
dann baue in der Schaltung auch einen externen Pullup-Widerstand ein so 
wie auf dem Pollinboard.

 Schaltung 

Für die T1 bis T3 würde man eher PNP Transistoren nehmen und PNP gemäß 
ansteuern.

von Mike (Gast)


Lesenswert?

Vielen Dank muss ich sagen :)

Der Atmel läuft jetzt super. Ich habe den PA2 als Reset gelassen und mit 
dem internen pull-up Widerstand auf 5 volt gelegt. Hinter den 
Spannungsregler an die 5 Volt musste noch ein kondensator da sonst, wenn 
alle LED's an waren der Reset wieder low erkannt hat. Aber jetzt läuft 
es erst mal.

Das mit den Transistoren werde ich mir nochmal angucken.
Muss auch dazu sagen war das erste mal das ich mit Transistoren 
gearbeitet habe. Und sie haben auch nicht die von mir erwartete 
Ausgangsspannung von 12 Volt.

Wenn alles funktioniert werde ich die Schaltung und ein kleines 
Testprogramm nochmal reinstellen damit sich Interessenten den LED-Cube 
nachbauen können.

Vielen Dank an dich Stefan B.

von GastGast (Gast)


Lesenswert?

Hallo,

Mike schrieb:
> Hinter den
> Spannungsregler an die 5 Volt musste noch ein kondensator da sonst, wenn
> alle LED's an waren der Reset wieder low erkannt hat. Aber jetzt läuft
> es erst mal.
Da Du die nicht eingezeichnet hast und selber schreibst, daß Du Anfänger 
bist, ist hier vielleicht noch ein obligatorischer Hinweis angebracht: 
Man sollte immer passende Kapazitäten an die 78xx Regler hängen, am Ein- 
als auch am Ausgang. Am Ausgang können evtl. große Kapazitäten 
problematisch sein. Für die genaue Dimensionierung siehe Datenblatt, 
aber meistens sind jeweils 0.1uF keramisch perfekt. Ansonsten kann der 
Regler Murks bauen, auch z.B. dann wenn man an einer 
Experimentierplatine ein Bauteilbein auch nur ein wenig verbiegt, die 
Platine auf eine andere Unterlage stellt etc. Das ist einfach instabil 
und macht auf Dauer keinen Spaß.

von Einer (Gast)


Lesenswert?

Die Spannungen an den Emittern von T1-3 sind immer 0,7 V kleiner als die 
Basen welche max. 5V sein können also max. 4,3 V.
Stichwort Kollektorschaltung bzw. Emitterfolger.

von Christian H. (netzwanze) Benutzerseite


Lesenswert?

Was ich besonders unschön und irritierend finde ist der in den 
Schaltplan eingezeichnete Spannungsregler als Gehäusebild. Wenn man sich 
auf das Bild verlässt und nicht die Pinnummern beachtet, geht das 
sicherlich schief, da der mittlere Pin GND ist.

Daher immer das Schaltzeichen und nicht die Gehäuseform verwenden.

von Mike (Gast)


Lesenswert?

Der mitllere Pin ist nicht GND. Ich habs ja mit 1 3 2 beschriftet und 
immer 1 = Vi; 2 = GND und 3 = Vo. Es gibt Transistoren die 1 3 2 und 
welche die 1 2 3 belegt sind. Man sollte da ja eh ins Datenblatt gucken.

von Mike (Gast)


Lesenswert?

Hast aber Recht das ich das Schaltzeichen benutzen sollte und nicht das 
Gehäusebild :)

von Christian H. (netzwanze) Benutzerseite


Angehängte Dateien:

Lesenswert?

Mike schrieb:
> Der mitllere Pin ist nicht GND. Ich habs ja mit 1 3 2 beschriftet und
> immer 1 = Vi; 2 = GND und 3 = Vo. Es gibt Transistoren die 1 3 2 und
> welche die 1 2 3 belegt sind. Man sollte da ja eh ins Datenblatt gucken.

1. Der 7805 ist kein Transistor, sondern ein Spannungsregler.
2. In der Bauform TO220 ist links der Eingang, in der Mitte GND und 
rechts der Ausgang.
3. Gezählt wird hier immer von links nach rechts, als 1,2,3

von Mike (Gast)


Lesenswert?

Hast Recht. STeht so im PDF. Hab ich auch so eingelötet.... keine Ahnung 
wie ich jetzt da drauf kam :)

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.