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
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)
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
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.
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.
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
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
ja, bin für jede information dankbar! ist eagle ein vectorgrafik programm? wenn ja, für welches OS? mfg blan
> ja, bin für jede information dankbar! ist eagle ein vectorgrafik > programm? wenn ja, für welches OS? www.cadsoft.de ...
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
Das machst du zwar sehr ordentlich, dennoch sind wir im 21. Jahrhundert, und da gibt's Layoutprogramme ;). Macht viel mehr Spaß damit :)
Versuch auch die Leds in eine Reihe zu kriegen. Macht mehr Spass bei der Programmierung von Lauflichtern.
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
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!
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
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? ...
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
danke, werd mir die sachen mal anschaun und dann mal loslegen. mfg blan
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
freie software: http://www.mikrocontroller.net/articles/Schaltplaneditoren -> gschem/pcb -> kicad -> tinycad
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.
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
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
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).
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
Wieso schaltest Du einen Pin, an dem eine LED hängt, auf Eingang??? Habe noch keine LED kennengelernt, die Daten sendet oder so...
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; }
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.
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
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 );
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.
LED :so funktioniert dein Programm nicht -| | | __ |-----|__|--+-- | _|_ | \|/ -| | | --- so ja: ------------+-------------+5V -| _|_ | \|/ | __ | |-----|__|-+--- | | -|
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.
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.
@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.
> 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.
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
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.
@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.
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.
oh ok, dann funktioniert bis jetzt alles. danke für die viele hilfe ! mfg blan
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.