Forum: Mikrocontroller und Digitale Elektronik Transistor und Atmega88


von Aron (Gast)


Lesenswert?

Tag Jungs

Ich bin ein Anfänger in dem Bereich, und  möchte anhand eines Ausgangs 
eines Atmega88 ein  Transistor ansteuern .wäre die schreibweise so 
richtig oder nicht?


PORTC = (1 << DDC3); Transistor ein


PORTC &= ~(1<<PC3);  Transistor aus

Danke
Aron

von Düsendieb (Gast)


Lesenswert?

Aron schrieb:
> PORTC = (1 << DDC3); Transistor ein
> PORTC &= ~(1<<PC3);  Transistor aus



so reicht es aus:

PORTC = (1 << 3); Transistor ein
PORTC &= ~(1 << 3);  Transistor aus

von Sepp (Gast)


Lesenswert?

Nicht vergessen:

DDRC = (1 << DDC3); // Pin als Output schalten...

von bitte löschen (Gast)


Lesenswert?

Düsendieb schrieb:
> so reicht es aus:
>
> PORTC = (1 << 3); Transistor ein
> PORTC &= ~(1 << 3);  Transistor aus

Warum gibst Du einem Anfänger, der auf vorbildliche Weise symbolische 
Konstanten verwendet, die Empfehlung, dies nicht zu tun?

von Captain S. (captainsubtext)


Lesenswert?

Aron schrieb:
> PORTC = (1 << DDC3); Transistor ein

Hallo Aron,
das einschalten würde ich ein wenig abändern:

PORTC |= (1 << PC3); //Transistor ein

Durch das ODER ( | ) werden die anderen Pins am Port C nicht verändert, 
statt "DDC3" würde ich der Übersichtlichkeit halber "PC3" schreiben.

Aber ansonsten stimmt alles!

von Aron (Gast)


Angehängte Dateien:

Lesenswert?

Hi
Danke für euere schnelle Antwort

ich habe jetzt mein Program geändert, leider tut sich nicht viel.

Ich habe ein Overflow programmiert die mir jede Sekunde  3 anlaoge 
Spannungen misst.die dritte Spannungen wird nachdem einschalten eins 
Transistors gemessen. nun habe ich das Problem, dass die Spannung 
abwechslend richtig oder falsch messe.
Beispiel:
erste Messung richtig--> nächste Rotiene---> Messung falsch---> nächste 
Rotiene--> Messung Richtig und so weiter.
Ich bin mir sicher das liegt an der Steuerung des Transistors aber ich 
weiss nicht was falsch ist, vielleicht wirft jemand einen Blick auf 
meinen Programm, mit der Hoffung ein Fehler zu finden

PS: Ich verwende ein Atmega88
MfG
Aron

von Rene K. (draconix)


Lesenswert?

Oha, da sehe ich böse Fallen!

1.) Variablen Deklaration

unsigned int adc=0.0 ....

bringt nichts... ein unsigned int ist immer ganzzahlig.

2.) Der Interrupt

Du rufst in deiner Interrupt Routine eine externe Routine auf: Macht man 
nicht, und sollte eigentlich auch nicht gehen.

Du hast keine Variablen Volatile Deklariert (z.b. adc0.. etc...)

Du sendest aus deiner Interrupt Routine an die UART... böse Falle...

Deine Interruptroutine sollte wenn möglich nur einen Läufer setzen, in 
deiner Hauptschleife in Main sollte dieses dann alles berechnet werden.

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.