mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Anfängerschaltung - ATmega8


Autor: blan (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
hallo,
so ich versuch mich nun mal nach meinem ersten erfolgreichen versuchen
an meinem STK500 an eine selbst gelötete Platine.
Ich will mir eine kleine Schaltung mit einem ATmega8 und einem MAX232
basteln mit der ich dann über RS232 LEDs an- und ausschalten kann (über
ein Terminal am Computer).
Wie ichs auch schon in der Schule gelernt hab habe ich also die platine
im 2:1 maßstab auf meinem block gezeichnet und schonmal den ATmega8
angeschlossen und wollte von euch nun wissen ob es so klappt wie ich
mir des vorgestellt hab,
vorallem die resetkontakte (x1, x2) der kondensator (c1) und die diode
(d1). das ich noch AVcc, ARef und GND anschließfen muss weiss ich
schon. Und wenn euch noch was einfällt was vll besser gemacht werden
könnte - würd es gern erfahren. danke.

(Es handelt sich um eine Streifen(?) Europlatine, die verbindungsbahnen
gehen von links nach rechts)

mfg blan

Autor: Jan M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das sollte durchaus so funktionieren.
Der Kondensator sollte im Allgemeinen möglichst nah an den IC, <1cm ist
üblich.
Die Diode ist nicht unbedingt nötig, kann aber die Schaltung unter
Umständen schützen. Beachte aber bei der Wahl der Versorgungsspannung
den Spannungsabfall an der Diode.

Genauso, wenn du den Max232 einzeichnest: Die Kondensatoren möglichst
direkt neben den IC (das funktioniert auf Grund der Pinbelegung sehr
schön)

Autor: blan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
danke, das mit dem Kondensator habe ich nicht gewusst. wie siehts denn
mit dem MAX232 und generell anderen ICs aus - brauchen die alle einen
seperaten Kondensator, ich wollte ja hier gleich einen für alles nehmen
was wohl nicht so gut ist oder?
ich bin schonmal beruhigt das der reset funktioniert :)

mfg blan

Autor: Jan M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Naja, "brauchen" ist relativ. Es kann durchaus auch komplett ohne
funktionieren, besser ist jedoch, an jedem IC-Anschluss einen
Kondensator sitzen zu haben. (Gut, für den Mega8 verwende ich immer nur
einen, der sitzt als smd mittig unter dem IC).
Und angesichts der Preise für einen einzelnen kleinen Kondensator nimmt
man da besser gleich einen Hunderterpack für 2 Euro und setzt an jeden
IC einen, damit hat man dann schon mal eine Fehlerquelle
ausgeschlossen.

Autor: Hauke Radtki (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du solltest für jedes IC einen eigenen 100nF kondensator anbringen.
Diese dienen zum filtern der Spannung. Diese könnte von allem möglichem
gestört werden (äußere einstralungen, übersprechen von anderen leitungen
usw) Und sollte direkt am IC sitzen, da ja sonst wieder störungen auf
die Spannung übertragen werden könnten.

Autor: blan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok, erstmal vielen dank habt mir sehr geholfen. werde jetzt erstmal den
plan umändern und vervollständigen danach evtl nochmal euch um hilfe
bitten :)

mfg blan

Autor: Sven (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich hab vor längerem mal so was im eagle gemacht wenn interresse besteht
kann ich das board also eagle datei oder jpg zum ätzen mal posten.

sven

Autor: blan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja, bin für jede information dankbar! ist eagle ein vectorgrafik
programm? wenn ja, für welches OS?

mfg blan

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> ja, bin für jede information dankbar! ist eagle ein vectorgrafik
> programm? wenn ja, für welches OS?

www.cadsoft.de

...

Autor: blan (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
hi,
ich hab nun die ganze Schaltung fertig und auch noch optimiert und
wollte gern das es jemand überprüft der sowas schonmal gemacht hat.
außerdem bin ich mir nicht sicher ob ich GND (22), Aref (21) und AVcc
(20) am ATmega8 richtig, also ohne Kondensator, angeschlossen habe.
Falls jemand noch ein fehler auffällt, bitte sagts mir. danke

mfg blan

Autor: Reinhold Rabe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das machst du zwar sehr ordentlich, dennoch sind wir im 21. Jahrhundert,
und da gibt's Layoutprogramme ;). Macht viel mehr Spaß damit :)

Autor: Karl heinz Buchegger (kbucheg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Versuch auch die Leds in eine Reihe zu kriegen.
Macht mehr Spass bei der Programmierung von Lauflichtern.

Autor: blan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wenn du mir ein freies layout programm zeigst werd ich das in zukunft
benutzen :)
aber zu meiner frage, funktioniert die schaltung so? will die
fehlerquelle bei der schaltung schonmal ausschließen. die kreise sind
übrigends unterbrechungen. danke

mfg blan

Autor: Helferlein (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Denke bitte daran, die Leiterbahnen auch unter dem IC's zu trennen, so
dass nicht die rechte Seite der Pins mit der linken Seite der Pins
verbunden ist!

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> ein freies layout programm

http://www.cadsoft.de/freeware.htm

...

Autor: blan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
mit frei dachte ich eher an unter (L)GPL gestellte Software, nunja ich
werds mir mal anschaun. kann mir noch jemand folgendes beantworten:

> außerdem bin ich mir nicht sicher ob ich GND (22), Aref (21) und
AVcc
> (20) am ATmega8 richtig, also ohne Kondensator, angeschlossen habe.

mfg blan

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn du nicht sicher bist, dann schau doch einfach mal bei ATMEL nach
den AVR-AppNotes, da ist mit Sicherheit etwas zum Schaltungsdesign
dabei. Auch das Datenblatt hat dafür vermutlich ein paar
Informationen.

Da ich es ablehne, in riesengroßen Grafiken herumzuscrollen und dabei
immer nur einen kleinen Ausschnitt zu sehen, kann ich zu deinem Entwurf
nix sagen, sorry.

Aber der ATMega8 sollte als Minimalbeschaltung haben:
- 100nF Kerko zwischen Vcc und GND
- 100nF Kerko zwischen AVcc und AGND
- 100nF Kerko zwischen AREF und AVcc
- 3k3..10k zwischen Reset und Vcc

Bei Benutzung des ADC empfiehlt sich der Einsatz einer Drossel zum
Entkoppeln von AVcc von Vcc, Einzelheiten stehen im Datenblatt.
Weiterhin sollten GND und AGND am gemeinsamen Massepunkt der Platine
(da, wo der Elko und ggf ein weiterer 100nF-Kerko sitzt) verbunden
sein.

Weitere Informationen findest du auch im WIKI (Atrikelsammlung).

Was willst du mit einem GPL-Layoutprogramm, wenn du die
Freeware-Version von Eagle ganz legal kostenlos nutzen darfst?

...

Autor: Pat F. (breaker87)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schau dir mal folgenden Thread an:
http://www.mikrocontroller.net/forum/read-1-380621.html#new

Das ist ein kleines aber Feines Entwicklungsboard mit dem Mega8...


mfg

Autor: blan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
danke, werd mir die sachen mal anschaun und dann mal loslegen.

mfg blan

Autor: blan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi ich bins mal wieder. also hab mir jetzt bauteile gekauft aber bin mir
nicht sicher ob ich überhaupt die richtigen erwischt hab. also die
reichelt bestellnummer ist "X7R-2,5 100N". und ist es ein problem
wenn in einem schaltplan ein kondensator eingezeichnet ist der eine
bestimmte polarität hat und mein kondensator (so wie ich es seh) keine
bestimmte polarität hat?

mfg blan

Autor: Hauke Radtki (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
nein nur anders herum wäre ungesund.

Autor: Alex Trusk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
freie software:
http://www.mikrocontroller.net/articles/Schaltplaneditoren
-> gschem/pcb
-> kicad
-> tinycad

Autor: zerberus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi blan,

kann mich alex nur anschließen. Ich würde mal gschem und pcb
probieren.
Alles GPL.

http://geda.seul.org/

ich gehe mal davon aus, dass du Linux benutzt, wenn du schon auf GPL
bestehst :)

Ciao
 Z.

Autor: blan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
danke, ja ich benutze linux. jetzt hab ich ein kleines problem: meine
schaltung scheint (vll bis aufn reset) zu funktionieren bloß versteh
ich net wieso mein port nur negative spannung (-1.8V) ausgibt um bei
positiv immer bei  0.0V bleibt, kann mir das jemand kurz erläutern das
ich das verstehen kann?

mfg blan

Autor: blan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hrm kann mir wirklich niemand helfen? ich bekomm aus meinem avr PB0 nur
0,3V / 0,5V (bei 5,12V / 6,9V Spannungszufuhr)... woran kann das
liegen, vorher hab ich irgendwann mal 1,8V bekommen jetzt aber netmehr?
o.O

mfg blan

Autor: Karl heinz Buchegger (kbucheg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Welches Programm?
Hast du den Port auf Ausgang gestellt?
(Deine Volt Zahlen schauen so aus als ob der
Port auf Engang wäre und du nur den Pullup
ein und ausschaltest).

Autor: blan (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
hier mal der code. außerdem verhält sich der AVR komisch, manchmal is
garkeine spannung drauf (~0.01V) und manchmal scho (~0.5V) ... sehr
merkwürdig.

mfg blan

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wieso schaltest Du einen Pin, an dem eine LED hängt, auf Eingang??? Habe
noch keine LED kennengelernt, die Daten sendet oder so...

Autor: Rolf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Würde ja mal das Programm mehr als einmal laufe lassen.

#include <avr/io.h>
#include <avr/signal.h>
#include <avr/interrupt.h>

#define LED_DDR         DDRB
#define PORT            PORTB
#define LED_0           0

uint8_t i = 0;
uint8_t j = 0;

SIGNAL(SIG_OVERFLOW0)
{
  if(j == 15)
  {
    if(i)
          LED_DDR &= ~(1 << LED_0);
    else
          LED_DDR |=  (1 << LED_0);

        j = 0;
        i = !i;
  }

  j++;
}

int main(void)
{
  TIMSK |= (1 << TOIE0);
  TCNT0  = 0x0;
  TCCR0 |= (1 << CS00) | (1 << CS02);

  PORT &= ~(1 << LED_0);

  sei();

  return 0;
}

Autor: Rolf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
vor Return 0 setze mal ein while(1);

Autor: Rolf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Falls du deime LED mit der Katode am PORTB PIN0 und mit der Anode an
Plus (nätülich mit Vorwiderstand) angeschlossen hast, sollte es
funktionieren.
Im AVR passt's.

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Noch ein paar Anmerkungen:
1. Globale Variablen, die in Interrupt-Handlern bearbeitet werden
müssen volatile deklariert sein!
2. Bitte benutze die aktuelle WINAVR-Version. SIGNAL ist veraltet!
3. Endlosschleife am Ende

Autor: Karl heinz Buchegger (kbucheg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dachte ich mirs doch:

int main(void)
{
  TIMSK |= (1 << TOIE0);
  TCNT0  = 0x0;
  TCCR0 |= (1 << CS00) | (1 << CS02);

  PORT &= ~(1 << LED_0);


PORT also PORTB ist immer noch auf Eingang geschaltet.
DDRB, also LED_DDR kommt mit einem Wert von 0 auf
die Welt und da du das nie änderst, bleibt das auch
auf 0. 0 bedeutet aber Eingang!

 TCCR0 |= (1 << CS00) | (1 << CS02);

 LED_DDR = ( 1 << LED_0 );  // den Pin an dem die LED hängt
                            // auf Ausgang schalten
 PORT &= ~( 1 << LED_0 );

Autor: Karl heinz Buchegger (kbucheg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ach jetzt seh ichs erst!
Du schaltest die Datenrichtung im Interrupt um!
Wenn du nur eine LED blinken lassen willst, macht man das
so:

SIGNAL(SIG_OVERFLOW0)
{
  if(j == 15)
  {
    if(i)
          PORT &= ~(1 << LED_0);
    else
          PORT |=  (1 << LED_0);

        j = 0;
        i = !i;
  }

  j++;
}

Du legst die Datenrichtung einmal beim Programmstart
in main() fest (mittels LED_DDR) und wechselst dann
über den PORT den Ausgangspin von 0 auf 1 bzw. umgekehrt.

Autor: Rolf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
LED :so funktioniert dein Programm nicht

-|
 |
 |      __
 |-----|__|--+--
 |          _|_
 |          \|/
-|           |
             |
            ---

so ja:
------------+-------------+5V
-|         _|_
 |         \|/
 |      __  |
 |-----|__|-+---
 |
 |
-|

Autor: Rolf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Funktioniert schon, wie er es macht.

Wenn sein DDR 0 is, ist der PIN tristate, also LED aus.
Wenn sein DDR 1 ist, ist der PIN Low, also LED an.

Autor: Karl heinz Buchegger (kbucheg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
In beiden Fällen würde das Programm die LED zum
blinken bringen :-) (wenn denn das Programm richtig
wäre).

Soooo wenig Strom können die Ausgangspins nun
auch wieder nicht liefern.

Autor: Rolf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Häh?

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Rolf:
Dann schau mal in sein Posting oben, wo er seinen Schaltplan drin hat.
Es ist zwar nicht leicht zu lesen, aber er hat die LEDs Low Side
angeschlossen. Und dann funktioniert das so nicht! Außerdem macht man
so etwas einfach nicht. Habe den Eindruck, er hat den Sinn des Data
Direction Register nicht ganz verstanden.

Autor: Karl heinz Buchegger (kbucheg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Funktioniert schon, wie er es macht.
>
> Wenn sein DDR 0 is, ist der PIN tristate, also LED aus.
> Wenn sein DDR 1 ist, ist der PIN Low, also LED an.

Darüber will ich jetzt erst mal gar nicht nachdenken.
Nicht bei einem ersten Programm von einem Neuling.

DDR legt die Datenrichtung fest
PORT schaltet den Ausgang auf 0/1

Alles andere ist für einen Neuling Käse.

Autor: blan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
okay vielen dank wie es aussieht funktionert es (5,12V). sry, das
problem ist das mein code auf dem STK500 funktioniert hat (mit den
onboard LEDS, ich hoff ich hab die jetzt nicht geschrottet mit 5V). was
mich jetzt bischen wundert das ich nach meinem 1kOhm wiederstand
immernoch 5,12V habe. laut der formel die ich gefunden haben

Rv = (Vges - Vdiode) / Iges
   = (5,12V - 1,9V ) / 0,006A
   = 536 Ohm

sicher wieder irgendein dummer fehler?

mfg blan

Autor: Heinzi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gesetz den Fall du hast 2 verschiedene Atmels über eine Pullup Leitung
verbunden. (wie es bei I2C gemacht wird.)

Es verboten sie gegeneinander zu treiben. ALso, wenn beide ihre PINs
als Ausgang schalten und gegensätzliches auf den Bus setzen wollen.

Also macht man es so.

Man schaltet High durch Setzen des DDR auf 0 (Weil PU hochzieht),
und L durch Setzen des DDR auf 1,
der Wert im Portregister muss natürlich 0 sein.

Autor: Karl heinz Buchegger (kbucheg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Heinzi

Hoer mal.
Ich hab da kein Problem damit, dass man das bei I2C Verbindungen
von 2 Atmels so macht.

Aber hier geht es nicht darum 2 Atmels mittels einer
Pullup Leitung zu verbinden und zu verhindern, dass sich
die gegenseitig zerfleischen.

Hier geht es einfach nur darum, dass ein Neuling auf
seinem ersten selbst gelöteten Board eine LED zum
Blinken bringen will.
Und dazu macht man das 'nach Vorschrift'.

Ein geübter Handwerker kann auch mit einem Schraubenzieher
einen Nagel in die Wand schlagen. Aber einem 14-jährigen
Nachwuchsbastler drücke ich dazu einen Hammer in die Hand.

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn die LED ausgeschaltet ist, dann hast Du natürlich auch dort die 5
V. Die LEDs auf dem STK500 kannste so leicht nicht schrotten, da die
noch zusätzlich über Transistoren angesteuert werden und so verdrahtet
sind, dass es unmöglich ist, da mit Software was kaputt zu machen.

Autor: ka-long (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

Miss die Spannung, wenn die Diode leuchtet !

Gruß ka-long

Autor: blan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
oh ok, dann funktioniert bis jetzt alles. danke für die viele hilfe !

mfg blan

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.