Guten Tag Zusammen, ich habe vor kurzem damit begonnen mich ein wenig mit der Programmierung von Atmel Microcontrollern schlau zu machen, und habe mich dabei für den ATMega 328PU entschieden. Leider verstehe ich nicht ganz warum bei meinen C Programm (siehe Bilddatei), bei einer Zustandsänderung am Input es ein paar Sekunden dauert bis der Atmel am Ausgangspin sein Pegel ändert (visualisiert durch LED). Sollte sich die LED nicht direkt ausschalten ? Zur Info der Input wird per Pullup Widerstand auf 5V gezogen. Falls Jemand eine Idee hat woran das liegen könnte würde mich das extrem interessieren. Vielen Dank im voraus Gruß Jonas
Jonas S. schrieb: > Leider verstehe ich nicht ganz warum bei meinen C Programm > ( siehe Bilddatei ), Finde den Fehler
Jonas S. schrieb: > (siehe Bilddatei), Erster Fehler! Jonas S. schrieb: > Sollte sich die LED nicht direkt ausschalten ? Durchaus.
Jonas S. schrieb: > Leider verstehe ich nicht ganz warum bei meinen C Programm (siehe > Bilddatei) Kein Source Code als Bilddatei! (was ist den los in den letzten Monaten)? Alle verblödet oder was? Sorry, aber solangsam macht das echt kein Spaß mehr. edit: @Jonas wie wäre es mit einem schaltplan? evtl. hast du ja versucht das entprellen per kondensator zu lösen... und der ist einfach zu groß?
:
Bearbeitet durch User
Könnte es sein, dass am Eingang ein Pull-Down fehlt und nur ein Taster den Pegel auf high zieht? Das Programm sieht korrekt aus.
Nachtrag: Das ist mein erster Beitrag, deshalb noch ein paar Informationen anbei 😅 Ein Schaltplan existiert noch nicht. Ich habe aber den Atmel nach Minimalbeschaltung angeschlossen (VCC,AVCC,GND + Abblockkondensator mit 100nF zwischen AVCC & GND). Die LED an PD5 ist über ein Widerstand gegen Masse, und der INPUT ist über ein 470 Ohm Widerstand zum an oder ausschalten der LED entweder an 5V oder Potentialfrei. Hier ist der Source Code:
1 | #include <avr/io.h> |
2 | #include <util/delay.h> |
3 | #define F_CPU 8000000 |
4 | |
5 | int main(void){ |
6 | |
7 | |
8 | DDRD = 0b00100000; //set PD5 as an OUTPUT SOURCE |
9 | PORTD = 0b00000000; |
10 | |
11 | while(1) |
12 | |
13 | { |
14 | if((PIND & (1<<PD4))) |
15 | { |
16 | PORTD |= (1<<PD5); |
17 | |
18 | } |
19 | else |
20 | { |
21 | PORTD &= ~(1<<PD5); |
22 | |
23 | } |
24 | |
25 | } |
26 | return(0); |
27 | } |
Jonas S. schrieb: > ein 470 Ohm Widerstand zum an oder ausschalten der LED entweder an 5V > oder Potentialfrei. "Potentialfrei" mögen digitale Eingänge garnicht. Schalt den entweder gegen 5V oder 0V/GND. Oder pack einen Pull-Down daneben. Oder aktiviere den internen Pull-Up und verwende deinen Tast-Widerstand mit "Potentialfrei oder GND".
Jonas S. schrieb: > DDRD = 0b00100000; //set PD5 as an OUTPUT SOURCE > PORTD = 0b00000000; Die Verwendung eines Pull-Ups setzt voraus, das der Pull-Up auch aktiviert wirrd.
1 | DDRD = 1<<5; //Output |
2 | PORTD = 1<<4; //Pull-Up |
Nur so aus dem Kopf, hab AVRs schon seit Ewigkeiten nicht mehr benutzt.
Hi Malte, danke für deine Antwort. Ich schalte den Input über den Pullup auf 5V, per jumper Kabel am Bredboard. Das heißt wenn ich die 5V abklemme hat der Input kein Potential. Kann das zu besagtem Verhalten führen ? MfG
Jonas S. schrieb: > Hi Malte, > danke für deine Antwort. > Ich schalte den Input über den Pullup auf 5V, per jumper Kabel am > Bredboard. > Das heißt wenn ich die 5V abklemme hat der Input kein Potential. Das ist dann kein Pullup. Dann floatet der Eingang. Das ist Mist.
Jonas S. schrieb: > und der INPUT ist über ein 470 Ohm Widerstand zum an oder ausschalten der > LED entweder an 5V oder Potentialfrei. Potentialfrei geht gar nicht. Wenn der Pin in der Luft hängt, dann schleicht sein Eingang irgendwann irgendwo hin. Es ist Zufall, dass er bei dir die LED sogar schaltet nach einer Sekunde. Der Input braucht einen Pullup, wenn der Taster/Schalter nach GND geht oder er braucht einen Pulldown, wenn er nach VCC geht. Ein Widerstand in Reihe ist überflüssig; ein kleinerer kann sinnvoll sein, wenn du an dem Pin noch einen Kondensator hängen hast für die Trivialentprellung. Jonas S. schrieb: > Ein Schaltplan existiert noch nicht. Dann mal einen! Einen, den der Rest der Welt auch versteht: Leitungen, die miteinander verbunden sind, haben einen Punkt an der Stelle. Große rote 'X' gibt es nicht in Schaltplänen. Und weder der Taster noch die LED sind eingezeichnet. Das darf zur Not auch eine Handskizze sein, die du abfotografierst.
Auch so ein Plan reicht:
1 | VCC VCC |
2 | + + |
3 | | | |
4 | .-. | |
5 | | | .--o------. |
6 | | | | | |
7 | '-' | | |
8 | | | PD5 o----. |
9 | | | | | |
10 | o-----o PD4 | .-. |
11 | | | | | | |
12 | | o | | | | |
13 | |=|> | | '-' |
14 | | o | | | |
15 | | | | | |
16 | | | | V -> |
17 | | | | - |
18 | | | | | |
19 | | '---o-----' === |
20 | === | GND |
21 | GND === |
22 | GND |
Ich muss aber zugeben, dass das Beispiel für eine Tastenabfrage nicht gerade gelungen ist (unter der Überschrift "Absolute Beginner": https://www.mikrocontroller.net/articles/Absolute_Beginner-AVR_Steckbrettprojekte#Taster_abfragen
:
Bearbeitet durch User
Der Code muss auch noch nachgebessert werden. Stichwort Tastenprellen. So läuft die While Schleife hunderte Male pro Sekunde durch und je nachdem wie der Taster gerade prellt flackert die Led.
Chris K. schrieb: > Der Code muss auch noch nachgebessert werden. Nö. Die LED soll offensichtlich den Zustand des Tasters wiedergeben. Daher ist das korrekt so.
Geht es hier wirklich um einen Atmega328PU? Oder nicht doch um einen Atmega328P-PU? LG, Sebastian
Klaus H. schrieb: > Potentialfrei geht gar nicht. Wenn der Pin in der Luft hängt, dann > schleicht sein Eingang irgendwann irgendwo hin. Es ist Zufall, dass er > bei dir die LED sogar schaltet nach einer Sekunde. AGREE !!! Wir hatten mal einen Azubi, der hatte es geschafft, in einer Hausaufgabe zur "kombinatorischen Logik" wild Gatterausgänge (damals noch TTL) miteinander zu verbinden. Sein Lehrmeister verstand die Welt nicht mehr und kam dann verzweifelt zu mir... Wir schlugen dann zusammen "The TTL Data Book for Design Engineers" (Texas Instruments) auf und ich zeigte ihm die prinzipielle Ausgangsschaltung eines TLL-Bausteins. So was hatte er noch nie gesehen, schon gar nicht in der Berufsschule. Nach 30 Minuten stand er auf und erklärte mir, er hätte verstanden worin seine Eselei gelegen hatte. Btw, das war ein richtig guter Mann, hatte dann seine Ausbildung als Jahrgangsbester abgeschlossen. Was ich damit sagen will: Es lohnt sich durchaus, besonders für Anfänger wie der TO, auch mal in alten Daten- oder Fachbücher zu schmökern, und sich mit zunächst uninteressant-scheinenden Details zu beschäftigen. Um es dem TO leichter zu machen, habe ich je einen Auszug aus dem Tietze/Schenk (5. Auflage) (-> 0963.jpg) sowie aus RCA "COS/MOS Integrated Circuits" (Ausgabe 1977) (-> 0962AB.jpg), jeweils mit Schaltungserklärungen, angehängt. Wer die Funktionsweise eines MOSFET kapiert hat, sollte mit diesen Erklärungen verstehen, wieso man entsprechende Bauteileingänge niemals offen lassen soll. just my 2ct
:
Bearbeitet durch User
Chris K. schrieb: > Der Code muss auch noch nachgebessert werden. Putz mal deine Glaskugel - du siehst Gespenster. Die LED soll genau dem Input durch den Taster folgen, nicht mehr und nicht weniger.
Klaus H. schrieb: > Ein Widerstand in Reihe ist überflüssig; ein kleinerer kann sinnvoll > sein, wenn du an dem Pin noch einen Kondensator hängen hast für > die Trivialentprellung. Sobald die Leitungen an die Außenwelt gehen, ist ein bisschen Trennung nicht die dümmste Idee. Ein Widerstand und ein Kondensator sind gegen kleinere ESD-Events nicht verkehrt. Und warum soll der Widerstand kleiner sein? Für gleiche Filterwirkung müsste der Kondensator dann unnötig größer werden. Bei störender Umgebung gehört zu dem TP-Filter dann allerdings ein Schmitt-Trigger Eingang.
Rainer W. schrieb: > Und warum soll der Widerstand kleiner sein? > Für gleiche Filterwirkung müsste der Kondensator dann unnötig größer > werden. Der Widerstand soll den Taster beim Entladen des Kondensators schützen. Wenn es dann auch noch zum Minimalstrom des Tasters passt, dann ist es noch besser. > Bei störender Umgebung gehört zu dem TP-Filter dann allerdings ein > Schmitt-Trigger Eingang. Haben die Atmel-μCs nicht sowieso einen?
Klaus H. schrieb: > Haben die Atmel-μCs nicht sowieso einen? Ja. Zwar ohne klar definierte Schaltschwellen, aber zum Entprellen reicht es dennoch.
Sebastian W. schrieb: > Geht es hier wirklich um einen Atmega328PU? Oder nicht doch um > einen > Atmega328P-PU? > > LG, Sebastian Moin Sebastian, es geht um einen ATMEGA328P U. MfG Jonas
Veit D. schrieb: > Hallo, > > am Restpin noch einen 5k oder 10k Pullup. Mache ich wenn ich einen finde 😁
Ich habe es jetzt mal mit Fritzing ausprobiert, ich hoffe daran kann man besser erkennen was gemeint ist. Hier ist der Schaltplan von der alten Bestückung.
Wie schön geschrieben: der pull-up an D4 fehlt, sofern du nicht den internen nimmst.
Wilhelm M. schrieb: > Wie schön geschrieben: der pull-up an D4 fehlt, sofern du nicht den > internen nimmst. Ja, habe mittlerweile eingesehen auf welchen Holzweg ich unterwegs war. Ich habe mittlerweile den internen im Register aktiviert.
Jonas S. schrieb: > Wilhelm M. schrieb: >> Wie schön geschrieben: der pull-up an D4 fehlt, sofern du nicht den >> internen nimmst. > > Ja, habe mittlerweile eingesehen auf welchen Holzweg ich unterwegs war. > Ich habe mittlerweile den internen im Register aktiviert. Wobei es eigentlich ja ein pulldown gewesen wäre...
Aus diesen Grund ist jetzt der Widerstand R2 auch auf Masse gelegt worden.
Jonas S. schrieb: > Moin Sebastian, > es geht um einen ATMEGA328P U. Den gibt es nicht. LG, Sebastian
Sebastian W. schrieb: > Den gibt es nicht. > LG, Sebastian Noch so ein Forist. Einfach zum Kotzen... Wenn es denn den einen gibt, und den anderen nicht, weiß jeder mit wenigstens ein bisschen Resthirn, welcher gemeint ist. Nebenbei bin ich mir fast sicher, schon welche ohne Bindestrich im Aufdruck gesehen zu haben. Dann wäre es eher so, dass es zu dem Chip kein Datenblatt gibt, sollte er im Datenblatt nur mit Bindestrich aufgeführt sein. Ich weiß es ehrlich gesagt nicht, aber es ist mir auch völlig egal. Was für ein kleinkarierter Kleingeist muss man bitte sein, um sich an so was aufzuhängen? Sorry fürs OT, aber das musste raus.
:
Bearbeitet durch User
J. T. schrieb: > Was für ein kleinkarierter Kleingeist muss man bitte sein, um sich an so > was aufzuhängen? Das war für mich die diplomatischste Art, Jonas klarzumachen, dass er "schludert". Nicht nur bei der Bezeichnung des uC, sondern auch bei seinem Quellcode (Einrückungen inkonsistent, Wertzuweisungen inkonsistent), bei seinem Schaltplan (Linien inkonsistent, Kontaktpunkte inkonsistent), seinen Bildern (Quellcode als Bild, dann Screendump als JPG), seiner Problembeschreibung, und seiner Verwendung von Begrifflichkeiten (und auch bei Groß- und Kleinschreibung und Kommasetzung seiner Beiträge). Du hast insofern recht, als du mich, was Qualität betrifft, weit auf der "Zen and the Art of Motorcycle Maintenance"-Seite des Spektrums verortest. Aber es braucht in diesem Metier halt erst einmal einiges an Erfahrung, um zu wissen, wo man ungestraft chaotisch sein kann und wo nicht. LG, Sebastian
:
Bearbeitet durch User
Sebastian W. schrieb: > Das war für mich die diplomatischste Art, Jonas klarzumachen, dass er > "schludert". In dem Fall musst du dich deinem eigenen Vorwurf stellen. Da wäre es doch wesentlich angebrachter etwas wie "übrigens KANN es bei der Bauteilebezeichnung um einzelne Zeichen gehen, die einen Unterschied in der Funktion machen" zu schreiben. Ein kindisches "isses a oder b? Ätsch a gibst gar nicht", wirkt da wenig kompetent. Sebastian W. schrieb: > Du hast insofern recht, als du mich, was Qualität betrifft, weit auf der > "Zen and the Art of Motorcycle Maintenance"-Seite des Spektrums > verortest Mit dieser Einschätzung liegst du falsch. Ich hatte dich weit auf der kindischen Seite verordnet, dass hast du mit deiner Erklärung zu Teilen wettmachen können. Zen and the art of motorcycle maintenance hörte/las ich gerade zum ersten Mal. Und sehr "zen-ig" wirkte es nicht auf mich.
:
Bearbeitet durch User
J. T. schrieb: > "isses a oder b? Ätsch a gibst gar nicht" Ich hatte im Beitrag #7496903 gefragt: > Geht es hier wirklich um einen Atmega328PU? Oder nicht doch um einen > Atmega328P-PU? Jonas S. hat darauf im Beitrag #7497468 geantwortet: > es geht um einen ATMEGA328P U. Ich hatte also gefragt, ist es wirklich a oder nicht doch b, worauf Jonas geantwortet hat, es sei weder a noch b sondern c! Der nicht-picopower Atmega328 ist ja uralt, und insofern ist es wahrscheinlich, dass Jonas über einen Atmega328P berichtet. Aber den gibt es nicht in der Bauform -U. Wenn das Marking bei Jonas also tatsächlich "ATMEGA328P U" lautet, dann würde mich interessieren, ob das ein echter Atmel/Microchip-IC ist, und wäre an einem Foto interessiert. Aber noch vermute ich Schludrigkeit ... LG, Sebastian
Jonas S. schrieb: > Anbei das Bild vom Gehäuse des Microcontrollers. Der sieht seltsam aus. Im Vegleich zu mir bekannten fehlt bei dir die helle Einfärbung der Schriftzeichen, und der Schriftsatz hat andere Proportionen. Vor allen das "G" ist auffällig anders. Bei der "2" und der "3" sieht man auch deutliche Unterschiede.
Steve van de Grens schrieb: > Da ist die Schrift deutlich heller. Einmal mit fettigen Fingern angefasst, und die Sache ändert sich. Ich würde jetzt nicht sofort "China-Fälschung" schreien, zumal die Bilder ganz sicher nicht bei gleicher Beleuchtung entstanden sind. Und auch bei Original-Teilen kann sich im Laufe der Jahre der Hersteller dazu entscheiden, die Beschriftung zu variieren, das hängt oft nur vom jeweiligen Herstellungsort ab (Atmel hat keine eigene Halbleiterfertigung, sondern lässt von Auftragsfertigern à la TSMC fertigen, und wer auch immer die Chips dann in Gehäusen unterbringt, beeinflusst das Aussehen). Seitdem Atmel von Microchip geschluckt wurde, kann sich das geändert haben; Microchip betreibt eigene Halbleiterwerke, nur ob dort auch die (ehemaligen) Atmel-Produkte gefertigt werden?
Harald K. schrieb: > Ich würde jetzt nicht sofort "China-Fälschung" schreien Ich auch nicht. Selbst wenn, es könnte eine gute Fälschung sein. Sollte der Chip jedoch unerwartete Probleme bereiten, würde ich ihn zum Vergleich mal austauschen bevor ich Stunden der Fehlersuche darin versenke.
Eben in meiner Sammlung nachgeschaut. Es hat eindeutig beide Beschriftungsarten über die Jahre gegeben. Und da auf dem Chip "ATMEGA328P U" drauf gedruckt ist, gibt es jeden Grund gerade für einen Anfänger diesen so zu bezeichnen.
Malte _. schrieb: > Es hat eindeutig beide > Beschriftungsarten über die Jahre gegeben. Nun, Deine helleren sind noch mit Siebdruck beschriftet, die dunkleren sind lasergraviert. Der zweite von Steve gezeigte ist aber auch lasergraviert, beim ersten ist das auch anzunehmen, aber das Bild zu schlecht, um das mit Gewissheit sagen zu können. Siebdruck hat den Nachteil, daß die Beschriftung nur einen Wisch mit einem Lösungsmittel braucht, um wegzusein.
Malte _. schrieb: > Und da auf dem Chip "ATMEGA328P U" drauf gedruckt ist, gibt es jeden > Grund gerade für einen Anfänger diesen so zu bezeichnen. Sorry für meine Unterstellung, Jonas. Dein IC ist ein Atmega328P in Bauform -PU, und du hast das Marking "ATMEGA328P U" ganz korrekt genannt. LG, Sebastian
Rainer W. schrieb: > Chris K. schrieb: >> Der Code muss auch noch nachgebessert werden. > > Putz mal deine Glaskugel - du siehst Gespenster. > Die LED soll genau dem Input durch den Taster folgen, nicht mehr und > nicht weniger. Das tut er auch weiterhin, wenn eine saubere Entprellung implementiert wurde. Nur eben ohne undefinierte Zwischenstände. Wenn er es schon lernen will, dann gleich richtig. Sonst kommt irgendwann der Punkt, wo nicht mehr nur eine LED gesteuert werden soll und es geht schief weil die Grundlagen nicht verstanden sind. Genau wie bei dir.
Sebastian W. schrieb: > Sorry für meine Unterstellung, Jonas. Das zeigt Größe, Fehler eingestehen zu können! Auch wenn sie nicht an mich gerichtet war, ist deine "Rumblafferei" damit wieder gut gemacht, zumindest aus meiner Sicht. Ich möchte hiermit den Vorwurf des "Forist seins" zurücknehmen. Der hatte nie die Größe, sich zu entschuldigen.
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.