Guten Tag,
ich habe einen für mich schwer zu findenen Bug in einer Platine.
Schaltplan siehe Anhang. Ich habe bereits mehrere davon aufgebaut und
bei ca der Hälfte kommt es regelmäßig zu Abstürzen oder der Atmega wird
plötzlich extrem langsam (statt 16Mhz eher so 10 Hz oder so).
Unten ist ein Testcode angehängt, der diesen Absturz auslöst. Der
eigentliche Code ist deutlich größer.
Ich weiß nur nicht, ob es an dem Schaltplanlayout liegt oder am Code
oder vielleicht daran, dass der Atmel beim Löten (Heißluftofen mit Rampe
bis 220°) kaputt geht.
Vielleicht hat jemand eine Idee, woran es liegen könnte.
Hier noch der Testcode (Arduino-IDE):
1
#include<EEPROM.h>
2
3
4
voideeprom_write_int(intp_address,intp_value);
5
unsignedinteeprom_read_int(intp_address);
6
voidevery_100_Millis();
7
voidevery_second();
8
9
shortintled_step=0;
10
inte_address=1;
11
inte_value=0;
12
inte_value_leds=0;
13
unsignedlongtime_in_millis;
14
unsignedlonglast_time_in_millis;
15
unsignedlongtime_in_sec;
16
unsignedlonglast_time_in_sec;
17
18
intleds[]={3,2,4,5,8,9};
19
20
voidsetup(){
21
pinMode(leds[0],OUTPUT);
22
pinMode(leds[1],OUTPUT);
23
pinMode(leds[2],OUTPUT);
24
pinMode(leds[3],OUTPUT);
25
pinMode(leds[4],OUTPUT);
26
pinMode(leds[5],OUTPUT);
27
28
Serial.begin(38400);
29
e_value=eeprom_read_int(e_address);
30
e_value_leds=eeprom_read_int(e_address+2);
31
Serial.print(F("Eeprom: "));
32
Serial.print(e_value);
33
Serial.print(F(";"));
34
Serial.println(e_value_leds);
35
e_value=e_value+1;
36
if(e_value>254){
37
e_value=0;
38
}
39
e_value_leds=e_value_leds+1;
40
if(e_value_leds>5){
41
e_value_leds=0;
42
}
43
eeprom_write_int(e_address,e_value);
44
eeprom_write_int(e_address+2,e_value_leds);
45
46
}
47
48
voidloop(){
49
time_in_millis=millis();
50
time_in_sec=round(time_in_millis/1000);
51
52
if(last_time_in_sec!=time_in_sec)
53
{
54
last_time_in_sec=time_in_sec;
55
if(time_in_sec%1==0){
56
every_second();
57
}
58
}
59
60
if(time_in_millis-last_time_in_millis>100)
61
{
62
last_time_in_millis=time_in_millis;
63
every_100_Millis();
64
}
65
delay(5);
66
}
67
68
69
voidevery_100_Millis()
70
{
71
led_step+=1;
72
if(led_step==2){
73
led_step=0;
74
}
75
digitalWrite(leds[e_value_leds],led_step);
76
Serial.println(millis());
77
}
78
79
voidevery_second()
80
{
81
}
82
83
84
85
//This function will write a 2 byte integer to the eeprom at the specified address and address + 1
86
voideeprom_write_int(intp_address,intp_value)
87
{
88
bytelowByte=((p_value>>0)&0xFF);
89
bytehighByte=((p_value>>8)&0xFF);
90
91
EEPROM.write(p_address,lowByte);
92
EEPROM.write(p_address+1,highByte);
93
}
94
95
//This function will read a 2 byte integer from the eeprom at the specified address and address + 1
Hat der ATmega garkeine 100nF Stützkondensatoren spendiert bekommen oder
sind die nur nicht eingezeichnet da die auf dem Arduino-Board(?) mit
drauf sind?
Meinst Du wegen des Doppelquarzes?
Ich vermute, daß die Kommentare im Programm den Ablauf verlangsamen. Der
µC muß jedesmal nachdenken, was denn nun zu tun ist.
quirlmalve schrieb:> delay(5);
Ein Delay, das zyklisch mehrere Millisekunden oder gar Sekunden verbrät,
ist ein Programmfehler.
> oder der Atmega wird plötzlich extrem langsam (statt 16Mhz eher so 10 Hz> oder so).
Gefühlt oder gemessen? Falls das Zweitere: wo gemessen?
> ob es an dem Schaltplanlayout liegt
Das Layout kennen wir noch gar nicht. Aber der Schaltplan schaut schon
mal naja, gewöhnungsbedürftig oder unüblich aus.
Und zumindest ich finde in diesem Suchbild keine Abblockkondensatoren.
Ohne die geht das niemals zuverlässig...
quirlmalve schrieb:> der Atmega wird> plötzlich extrem langsam (statt 16Mhz eher so 10 Hz oder so).
Der kann sich nicht zwischen den 2 Quarzen im Schaltplan entscheiden.
;-)
@Markus M.: Meinst du die 2 Kondensatoren, die direkt neben den Quartz
kommen ? Wenn, dann wären die schon eingezeichnet.
@Autor: m.n. (Gast): Der Doppelquartz hat mit der bestückung zu tun. Die
Platine wird natürlich nur mit einem Quartz bestückt. Einer der beiden
ist sehr klein und schwer zu löten, deshalb gibts jetzt alternativ auch
einen größeren.
Ich habe es mir ausnahmsweise mal erlaubt, in diesem Stück Minitestcode
mit Kommentaren zu geizen....
@ Lothar Miller: delay(xy) wird überarbeitet :)
Die Verlangsamung ist nur gefühlt, allerdings ist ein Symptom, dass der
Watchdog (den ich im Testcode anscheinend gar nicht drin hab) bei diesen
Abstürzen oder Verlangsamungen nicht ausgelöst wird oder zumindest erst
nach Stunden statt nach Sekunden, was mich vermuten lässt, dass die
Mühle eben irgendwie langsamer wird.
Bzgl. der Abblockkondensatoren: Das übersteigt mein E-Technikwissen. Was
muss ich da lesen oder wissen und wo sollen die hin?
Bzgl. des Schaltplans, der kann schon unüblich sein, weil ich kein
gelernter Etechniker bin. Ich hoffe, damit ist das Design des Plans
gemeint und nicht die Verschaltungen.
Das (etwas unübersichtliche) Platinenlayout habe ich auch beigefügt.
Darin sieht man auch "Doppelschalter" zu den Doppelquarzen, was wie
gesagt etwas mit der Bestückung zu tun hat.
Also erst mal Vref wird an einen 100nF angeschlossen der andere Pin des
100nF geht zu GND.
Direkt ZWISCHEN jedem VCC und GND Pärchen kommt ein 100nF mit maximal
3mm leitebahnlänge(besser kürzer).
http://www.lothar-miller.de/s9y/categories/14-Entkopplung
quirlmalve schrieb:> @Marc Vesely: sorgt dafür, dass die Methode every_second() so ca.> einmal> die Sekunde ausgeführt wird.
Mit Sicherheit nicht.
% ist der ganzzählige Rest der Teilung.
Da für jede Mögliche Zahl x in unsigned long gilt x = floor(x) * 1 + 0
ist das Ergebnis immer 0 und damit dein if immer wahr
=>
Dein if ist wirkungslos.
quirlmalve schrieb:> @Marc Vesely: sorgt dafür, dass die Methode every_second() so ca. einmal> die Sekunde ausgeführt wird.
Aha.
Und wann wird deine Abfrage etwas anderes als Null ergeben ?
interessanter Denkfehler, danke, das if kann man tatsächlich weglassen.
Es gibt allerdings im Originalcode auch Methoden, die alle 2 oder 10
Sekunden aufgerufen werden und da erscheint mir das dann schon sinnvoll.
Das ist aber bestimmt nicht das Problem, welches den Atmel zum Absturz
bringt.
Aref nie an VCC das wählt man per Setting, allenfalls wer eine externe
Vref einspeisen will der legt sie dort an.
Die fehlenden Abblockkondesatoren wurden ja schon bemäkelt, ich würde
220-470nF wählen, wenn am Reset noch eine längere Strippe hängt würde
ich dort 10-100nF spendieren und eine Diode parallel zum pullup.
Jean schrieb:>> ... ich würde 220-470nF wählen ...>>> ... 10-100nF spendieren ...>>> ... Diode parallel zum pullup ...>> Kannst du das begründen?
Die ehemals 100nF Abblockkondensatoren stammten aus einer Zeit als die
ICs nicht so leistungsfähig waren und sehr viele verbaut wurden, die
kapazitive Last sollte nicht zu groß werden, heute weniger ICs die
stärker sind können auch mehr Buffer vertragen, es schadet nicht und ich
muss nicht auf den 1/10 Ct. achten lieber auf Funktionssicherheit.
Kondensator am Reset, wenn lange Strippen dran sind ISP o.ä. kann das al
Antenne wirken und Resets auslösen
Diode damit dieser Kondensator schneller nach VCC entladen wird wenn die
VCC wegfällt.
Ich bin mit meiner Meinung ja nicht alleine, entweder schreiben alle von
mir ab oder es hat sich bewährt.
quirlmalve schrieb:> Es gibt allerdings im Originalcode auch Methoden, die alle 2 oder 10> Sekunden aufgerufen werden und da erscheint mir das dann schon sinnvoll.
Ist es aber nicht.
Das %10 ist für eine ganze Sekunde lang wahr. d.h. wenn dein delay(5)
dominant die Schleifenzeit bestimmt wird auch eine solche Abfrage ~200
mal hintereinander ausgeführt.
Gibt es eine Funktion die neben der delay noch Zeit vertrödelt (>1s)
dann kann es sein, dass die Funktion nie aufgerufen wird, da vllt. nie
genaue Vielfache von 10 vorkommen.
---
Da du offensichtlich also nur einen Ausschnitt gezeigt hast und hier
schon so einige Fallstricke stecken (viele viele viel Mehrfachaufrufe):
Wieviele Ausgaben machst du per Serial.println und co? Irgendwann läuft
auch der beste Buffer über (insbesondere, wenn die Ausgaben
hunderte/Tausende Male die Sekunde passieren). Dann muss auf die
Serielle Schnittstelle gewartet werden.
Mindestens 8 Zeichen (64 bit+start+stop) pro 5ms nach 100 Sekunden
Laufzeit sehe ich. Das sind hier also schon 34% deiner maximal möglichen
Übertragungsrate. Dazu kommen dann noch das was statt jede Sekunde alle
5 ms aufgerufen und gesendet und die Dinge, die statt einmal alle x
Sekunden alle 1 Sekunde lang alle 5ms gesendet wird.
Maxx schrieb:> Da du offensichtlich also nur einen Ausschnitt gezeigt hast und hier> schon so einige Fallstricke stecken (viele viele viel Mehrfachaufrufe):> Wieviele Ausgaben machst du per Serial.println und co?
Im originalen Code sind das eigentlich weniger Ausgaben über seriell.
Ich hatte schon die Vermutung, dass das Ganze etwas mit dem Serialbuffer
zu tun haben könnte. Wenn du aber sagst, dass ich mit meinem Testcode
bei 34% Auslastung der Schnittstelle bin, ist das doch ok, oder? Wie
gesagt, im Originalcode wird deutlich weniger übertragen, eher so 20-30
normale Wörter pro Sekunde.
Maxx schrieb:> Gibt es eine Funktion die neben der delay noch Zeit vertrödelt (>1s)
Nein, definitiv nicht und da gab es auch noch nie ein Problem aber danke
für den Hinweis. Der Testcode stürzt ja auch schon ab.
Danke für die vielen Hinweise auf die Abblockkondensatoren. Kann das
alleine schon diese Abstürze verursachen? Im nächsten Layout sind die
auf jeden Fall drin.
Das komische ist aber, dass eben ca. die Hälfte der hergestellten
Platinen problemlos laufen und die andere Hälfte irgendwann immer zu so
einem Absturz kommt. Und es ist auch nicht so, dass eine Platine mal
geht und dann irgendwann mal wieder nicht.
Joachim B. schrieb:> wenn am Reset noch eine längere Strippe hängt würde> ich dort 10-100nF spendieren und eine Diode parallel zum pullup.
Da hängt in der Regel eine ca 30cm Leitung dran, die quer durch einen
Schaltschrank geht. Da gab es auf jeden Fall auch schon komische Effekte
mit angeschlossener RS232-Leitung an einen Rechner. Der zusätzliche
Kondensator, soll der von DTR direkt am Stecker zu Gnd? Die Diode baue
ich ein.
Der Atmel hängt sich aber auch mit Testcode auf, wenn gar nix an der
seriellen Schnittstelle dranhängt.
Joachim B. schrieb:> Aref nie an VCC das wählt man per Setting
verstehe ich nicht ganz. Heißt das, ich kann das dem Atmel sagen, dass
er das intern verschalten soll?
> Ich bin mit meiner Meinung ja nicht alleine, entweder schreiben alle von> mir ab oder es hat sich bewährt.
Warum sollte von dir jemand abschreiben? Es gibt doch die Empfehlungen
der Hersteller der ICs. An die halte ich mich (z. B. AVR042: AVR
Hardware Design Considerations). Es hat mich nur interessiert, wie du
deine Vorschläge begründest.
Joachim B. schrieb:> Die ehemals 100nF Abblockkondensatoren stammten aus einer Zeit als die> ICs nicht so leistungsfähig waren und sehr viele verbaut wurden, die> kapazitive Last sollte nicht zu groß werden, heute weniger ICs die> stärker sind können auch mehr Buffer vertragen, es schadet nicht und ich> muss nicht auf den 1/10 Ct. achten lieber auf Funktionssicherheit.
Welch ein Unsinn. Du hast keinen blassen Schimmer, wozu die Dinger da
sind.
Joachim B. schrieb:> Diode damit dieser Kondensator schneller nach VCC entladen wird wenn die> VCC wegfällt.
Das ist unnötig seit es einen Brownout-Reset gibt...
Thomas E. schrieb:> Welch ein Unsinn. Du hast keinen blassen Schimmer,
ach was!
Nur DU alleine hast den Durchblick? was für ein Ego, viel Spass im
Leben!
Lothar M. schrieb:> Das ist unnötig seit es einen Brownout-Reset gibt...
Mag ja sein, aber schaden tut sie auch nicht, man kann auch aus einer
Diode ein Drama machen, es ist nicht dein Diodengeld was ich verbaue.
Wer sie weglassen mag darf doch, es wurde gefragt und habe geantwortet
warum ich sie einbaue, ist einfach ein liebgewonnener Automatismus.
Gut Neuem sollte man sich nicht verschliessen, vielleicht lasse ich sie
irgendwann weg, ich kann ja hinzulernen, anderen fällt es schwerer sogar
nützliches zu befolgen wie Abblockkondensatoren überhaupt vorzusehen ;)
quirlmalve schrieb:> Heißt das, ich kann das dem Atmel sagen, dass er das intern verschalten> soll?
Das steht im Datenblatt. Und das ist überhaupt die allererste
Anlaufstelle, wenn es darum geht, wie welcher Pin zu verschalten ist.
Für Aref steht da, dass dort entweder eine externe Referenzspannung
angelegt werden kann oder aber bei Verwendung einer internen Referenz
(also auch Vcc) dort lediglich ein Kondensator angeschlossen werden
soll:
1
24.5.2 ADC Voltage Reference
2
If the user has a fixed voltage source connected to the AREF pin, the user
3
may not use the other reference voltage options in the application, as
4
they will be shorted to the external voltage. If no external voltage is
5
applied to the AREF pin, the user may switch between AVCC and 1.1V as
6
reference selection.
Quelle:
http://www.atmel.com/images/Atmel-8271-8-bit-AVR-Microcontroller-ATmega48A-48PA-88A-88PA-168A-168PA-328-328P_datasheet_Complete.pdf
Bedeutet also: man darf durchaus eine fixe Spannung dort anschließen,
aber man darf dann nicht eine andere inerne Quelle als Referenz
auswählen, weil es sonst einen Kurzschluss gibt. Das kann man sich auch
leicht klarmachen, wenn man den Schaltplan des AD-Wandlers ansieht.
Joachim B. schrieb:> Ich bin mit meiner Meinung ja nicht alleine, entweder schreiben alle von> mir ab oder es hat sich bewährt.
Dazu passt das Ammenmärchen mit den zu verwerfenden ersten Messungen:
1
The first ADC conversion result after switching reference voltage source
2
may be inaccurate, and the user is advised to discard this result.
Nur beim Umschalten der Referenz und sofortigem Start einer neuen
Messung kann diese erste Messung ungenau sein. Wenn man umschaltet und
danach eine Weile wartet, ist auch die erste Messung genau. Auch das
wird von vielen falsch verstanden und jeder schreibt vom Anderen ab.
Joachim B. schrieb:> Die ehemals 100nF Abblockkondensatoren stammten aus einer Zeit als die> ICs nicht so leistungsfähig waren und sehr viele verbaut wurden, die> kapazitive Last sollte nicht zu groß werden, heute weniger ICs die> stärker sind können auch mehr Buffer vertragen
Blockkondensatoren müssen danach ausgewählt werden, welche Störfrequenz
vom IC ausgeht und "geblockt" werden muss. Da kann bei hochfrequenten
ICs und/oder steilen (internen!) Schaltflanken durchaus ein 10nF
Kondesator die bessere Wahl sein...
Moin,
Also ehrlich: Datenblaetter lesen, bevor man in Kleinserie geht und sich
wundert, ist doch heutzutage sowas von Eighties. Heutzutage gibts doch
youtube, wo jeder Depp jeden Quatsch filmen und hochladen kann. Wen
interessieren denn da noch die Datenblaetter und AppNotes von
Herstellern?
Auch voellig ueberschaetzt, uninteressant und keinesfalls lesens- und
verstehenswert waere z.B. das Kapitel 2.4 in den High Speed Layout
Guidelines von TI - deshalb sollte man keinesfalls nach scaa082 googlen,
sondern weiterhin Block-Cs am besten garnicht verwenden oder hoechstens
nach Kaffeesatzleserei-Kriterien.
Allergikerinfo: Dieser Beitrag kann Spuren von Nuessen,
Huelsenfruechten, sowie Gluten und Ironie enthalten.
Gruss
WK
Lothar M. schrieb:> Blockkondensatoren müssen danach ausgewählt werden, welche Störfrequenz> vom IC ausgeht und "geblockt" werden muss. Da kann bei hochfrequenten> ICs und/oder steilen (internen!) Schaltflanken durchaus ein 10nF> Kondesator die bessere Wahl sein...
vielleicht verwenden wir die Begriffe unterschiedlich!
Denn nenne ich sie Stützkondensatoren, auch wenn ich alt bin, einiges
ändert sich nicht!
Die Kondensatoren an VCC sollen Spannungseinbrüche durch Stromänderungen
am IC abschwächen die durch die Impedanz der Zuleitungen auch der
Leiterbahnen entstehen, wenn du nun beweist das KerKos mit 220-470nF das
schlechter schaffen als 100nF dann würde ich darüber nachdenken!
Dein Satz passt eher zu Reihenkondensatoren als Hochpass wo kleinere
Kondensatoren von 10nF Frequenzen schlechter passieren lassen als 220nF.
Auch ein 470nF KerKo Schiesst die "Störfrequenz vom IC ausgeht" nach GND
kurz,man nimmt ja keine Rollkondensatoren die hohe induktive Anteile
haben.
Ich denke mehr als die Wahl Blockkondensator über die man trefflich
diskutieren kann wirkt doch das gesamte Layout!
Da ist Blockkondensator nur ein Nebenkriegsschauplatz.
Und die 100nF in TTL Gräbern waren vielerlei geschuldet, den Kosten, dem
Leiterbahnwiderstand und der kapazitiven Last am Netzteil.
Joachim B. schrieb:> Lothar M. schrieb:>> Blockkondensatoren> vielleicht verwenden wir die Begriffe unterschiedlich!> Denn nenne ich sie Stützkondensatoren
Das ist lediglich die Kehrseite der Medaille.
Ursache für "das Problem" sind interne synchrone Schaltvorgänge. Wenn
dann die Flipflops umschalten, gibt es in die nächsten Eingänge
Umladeströme, die von der Versorgung bereitgestellt (=gestützt) werden
müssen. Und weil die nötigen Stromspitzen so steilflankig sind und ein
großes Störspektrum haben, sollten sie herausgefilter (=abgeblockt)
werden.
Und das Alles kann ein so ein kleiner Kondensator bewerkstelligen... ;-)
Joachim B. schrieb:> ach was!>> Nur DU alleine hast den Durchblick? was für ein Ego, viel Spass im> Leben!
Ja, habe ich. Aber nicht nur ich. Viele andere auch. Du hast diesen
Durchblick definitiv nicht. Wie viele andere auch. Im Gegensatz zu dir
nehmen die aber die Ratschläge von Experten an und stellen Bewährtes
nicht in Frage.
Joachim B. schrieb:> Da ist Blockkondensator nur ein Nebenkriegsschauplatz.
Bei einem verhältnismäßig lahmen AVR ist es das tatsächlich. Da reicht
es zumeist aus, daß auf der Tüte, aus der der Kondensator stammt,
Keramik draufsteht. Bei einer Gigahertzgranate wie einem PC gehört die
Auswahl und Platzierung der Stützkondensatoren zu den ultimativen
Herausforderungen für das Platinendesign.
Joachim B. schrieb:> Und die 100nF in TTL Gräbern waren vielerlei geschuldet, den Kosten, dem> Leiterbahnwiderstand und der kapazitiven Last am Netzteil.
In den berühmten TTL-Gräbern waren übrigens 1µF-Tantal-Kondensatoren
Erste Wahl. Einer pro IC-Reihe(Empfehlung aus einem TI-Handbuch von
1983).
Erst als die Taktraten höher wurden, kamen die Keramikkondensatoren
direkt am IC dazu.
Thomas E. schrieb:> Erst als die Taktraten höher wurden, kamen die Keramikkondensatoren> direkt am IC dazu.
Das hat aber prinzipiell nichts mit der höheren Taktrate zu tun,
sondern damit, dass die ICs "schneller" also steilflankiger
umschalteten.
Somit war die Ursache für die Blockkondensatoren direkt am IC die selbe
wie für die höheren Taktraten: schneller umschaltende ICs.
Das hat letztlich aber mit der eigentlichen Taktfrequenz des Designs
nichts zu tun. Ein schlecht geblocktes Design wird auch mit 1kHz wie mit
10MHz Taktfrequenz sauber vor sich hinstören...
Lothar M. schrieb:> Thomas E. schrieb:>> Erst als die Taktraten höher wurden, kamen die Keramikkondensatoren>> direkt am IC dazu.> Das hat aber prinzipiell nichts mit der höheren Taktrate zu tun,> sondern damit, dass die ICs "schneller" also steilflankiger> umschalteten.
Daß die ICs schneller schalten, ist aber die Voraussetzung. Gut, es ist
korrekter ausgedrückt.
Thomas E. schrieb:> Im Gegensatz zu dir> nehmen die aber die Ratschläge von Experten an und stellen Bewährtes> nicht in Frage.
ach was, als die Brooklyn Bridge gebaut wurde geschah das mit viel
Angstzuschlag, keiner hatte den Materialbedarf für den heutigen Verkehr
berechnet, die "modernen" Brücken wurden ingenieursmäßig berechnet und
halten kaum 40 Jahre!
Thomas E. schrieb:> Joachim B. schrieb:>> Da ist Blockkondensator nur ein Nebenkriegsschauplatz.>> Bei einem verhältnismäßig lahmen AVR ist es das tatsächlich.
wie war das TOPIC vom Thread?
ATmega328 und nur von dem schreibe ich!
Ein 470nF Keramikstützkondensator an den VCC ist allemal besser als
10-100nF oder keiner!
Typische LS TTL haben keine 40mA pro Ausgang treiben können, ein AVR
schon ergo braucht man mehr Stütze.
Thomas E. schrieb:> Bei einer Gigahertzgranate wie einem PC
Das ist OT
Übrigens auch Hersteller können irren, falsche Datenblätter sind mir
schon untergekommen und wer sagt denn das diese 100nF Empfehlung für
alle Layouts gilt, ich sage mal für 95% passt es, das Problem können die
letzten 5% werden.
Ausserdem will jeder Hersteller nicht schlechter dastehen als die
Mitbewerber, wenn PIC 100nF empfiehlt macht eine 220nF Empfehlung das
Produkt 8-Bit AVR teuerer im Design also wird wohl auch eher 100F
empfohlen.
Zuviel Herstellergläubigkeit kann aufs Glatteis führen.
Durchblick?
Thomas E. schrieb:> Ja, habe ich.
diskutier das mit Lothar :)
Lothar M. schrieb:> Thomas E. schrieb:>> Erst als die Taktraten höher wurden, kamen die Keramikkondensatoren>> direkt am IC dazu.> Das hat aber prinzipiell nichts mit der höheren Taktrate zu tun,> sondern damit, dass die ICs "schneller" also steilflankiger> umschalteten.
Hier beim TO scheint es aber nur an den vergessenen Cs zu liegen und an
der Software!
Ich hatte auch viele Debugausgaben am Serial.print der Buffer ist
default mir zu klein, dann spinnt die Kiste!
Man kann den Buffer in der Arduino IDE aber erhöhen!
(dabei den SRAM Bedarf nicht aus den Augen verlieren!)
Dergute W. schrieb:> Also ehrlich: Datenblaetter lesen, bevor man in Kleinserie geht und sich> wundert, ist doch heutzutage sowas von Eighties. Heutzutage gibts doch> youtube, wo jeder Depp jeden Quatsch filmen und hochladen kann. Wen> interessieren denn da noch die Datenblaetter und AppNotes von> Herstellern?
Ich nehme an, im Berufsschulunterricht von einschlägigen Berufen
werden auch nur noch solche Jutuubs gezeigt und die Berufsschul-
Lehrer sind mehr oder weniger entbehrlich? :-)
Dergute W. schrieb:> Moin,>> Also ehrlich: Datenblaetter lesen, bevor man in Kleinserie geht und sich> wundert,
Datenblätter können falsch sein, sind es manchmal auch und wer vom
Hersteller vorgeschlagene Layouts abweicht ohne die Prüfungen zu
wiederholen kann auch ganz fürchterlich auch als Profi auf die Nase
fallen so geschehen bei einem Telefon in tausender Stückzahlen!
Wer sagt denn das zum Stützkondensator nicht auch die parasitären
Kapazitäten vom Layout und vom Basismaterial gehört für eine 95%
Funktion (von der Menge der verbauten µC Controller)?
Harald W. schrieb:> Carl D. schrieb:>>> In welcher Art Gerät wird dieses Wunderwerk verbaut?>> Ich frage nur um vorgewarnt zu sein.>> Vielleicht in selbstfahrenden Autos?
Vermutlich wäre man verwundert, wenn man deren Software sehen würde.
Aber die wissen, warum Open Source böse ist. Und wer obiges Testprogramm
sieht, weiß es auch. Manche Geschäftsgeheimnisse sind einfach zu
blamabel um sie preis zugeben.
Joachim B. schrieb:> Wer sagt denn das zum Stützkondensator nicht auch die parasitären> Kapazitäten vom Layout und vom Basismaterial gehört für eine 95%> Funktion (von der Menge der verbauten µC Controller)?
Das Layout läßt aber keine Masseflächen erkennen, die als "Stütz-C"
dienen könnten. Ich sehen da nur jede Menge L's.
Carl D. schrieb:> Das Layout läßt aber keine Masseflächen erkennen, die als "Stütz-C"> dienen könnten.
stimmt, war von mir ja nur ein Beispiel, über DAS Layout kann man ja
wirklich kein weiteres Wort verlieren, das sieht eher aus wie meine
Küche nach Backen und Kochen
Dergute W. schrieb:> Also ehrlich: Datenblaetter lesen, bevor man in Kleinserie geht und sich> wundert, ist doch heutzutage sowas von Eighties.
Da gibt's 'ne App für!
Joachim B. schrieb:> Typische LS TTL haben keine 40mA pro Ausgang treiben können, ein AVR> schon ergo braucht man mehr Stütze.
Dafür sind die Kondensatoren aber gar nicht ...
Gruß
Jobst
Joachim B. schrieb:> Typische LS TTL haben keine 40mA pro Ausgang treiben können, ein AVR> schon ergo braucht man mehr Stütze.Thomas E. schrieb:> Du hast keinen blassen Schimmer, wozu die Dinger da> sind.Joachim B. schrieb:> Backen und Kochen
Du solltest dich darauf beschränken.
Joachim B. schrieb:> Typische LS TTL haben keine 40mA pro Ausgang treiben können, ein AVR> schon ergo braucht man mehr Stütze.
Ohne auf die Richtigkeit deiner Aussage einzugehen:
Wenn man es schon mit Lateinisch versucht, sollte auch die
Interpunktion stimmen.
Hallo quirlmalve,
ohne die wertvolle Beiträge der Granden des Forums unterbrechen zu
wollen, habe ich den Eindruck gewonnen, diese fokussieren nicht
ausschließlich auf Dein ursprüngliches Anliegen.
Ich möchte Dir zunächst meine Hochachtung dafür aussprechen, das Du mit
Fritzing etwas funktionierendes hast schaffen können.
Ich habe Fritzing auch versucht, nach 2 Tagen ob der vielen Bugs
und/oder unintuitiven Bedienung aufgegeben.
Falls Du noch mal eine Leiterplatte entwerfen möchtest: Wähle ein
anderes Tool. Mein Favorit ist Target 30001!, Eagle tut es ebenso seit
Jahren für tausende Projekte, KiCad fast ebenso wie Circuit Maker.
Ein gutes Layout ist auch irgendwie schön, was Fritzig erzeugt hat, ist
.... nicht schön.
Wenngleich vermutlich nicht verantwortlich für die von Dir geschilderten
Probleme.
Ich habe einige geringe Amateur(in)Erfahrung mit Arduino.
Was ich ändern würde:
1) Abblockondensatoren.
Sieh' Dir das Referezdesing an, z.B. hier:
https://www.arduino.cc/en/uploads/Main/Arduino_Uno_Rev3-schematic.pdf
Wo ein Pluspol ist, ist ein 100 nF Kondensator nach Masse.
2) Bau Ausdrücke wie
if (time_in_sec % 1 == 0)
um in
if (time_in_sec - last_time_in_sec > 1) ;
Den Konstrukt hast Du ohnehin schon eingesetzt bei ...milis > 100
Die Gründe, warum, sind schon genannt.
3) Serial.begin(38400); -> Serial.begin(115200);
Innerhalb meiner Erfahrung hat eine niedrige Serial-Geschwindigkeit noch
nie genutzt. Egal was nicht ging - es ging nicht, weder mit 115200 noch
mit 9600.
Deine IDE-Speed solltest Du natürlich auch anpassen
4) Hinter jeder verdächtige Anweisung ein Serial.print. An Hand der
letzen weist Du, wo die Kiste stehen blieb.
Besonders verdächtig sind Pointer, welche man ausrechnet, wie p_address
in EEPROM.write(p_address, lowByte);
oder Aufrufe von Interface Routine, bei den z.B das Handshaking oder die
Interrupts nicht stimmen oder nicht erkannt werden.
Aber auch sonst lohnt es sich, die berechneten Variablen auszugeben und
nachzusehen, ob diese so etwa das sind, was man sich beim
Programmentwurf dachte.
Innerhalb meiner Erfahrung, und ich versicher Dir, ich war nicht sparsam
mit den Serial.prints :-), sind keine Probleme mit dem Serial - Puffer
aufgetreten, wie oben befürchtet.
5) Bist Du sicher, das der Speicher ausreicht - SRAM, EEPROM ?
Myka
Hallo Myka,
ich glaube, jetzt hast du die "Granden des Forums" doch zum Schweigen
gebracht. Vielleicht war dein Beitrag einfach zu nett, so dass es ihnen
die Sprache verschlagen hat. Vielen Dank für die freundlichen Worte und
die vielen Tipps. Ich habe schon angefangen, mich in KiCAD
einzuarbeiten, das Fritzing nervt mich schon lange mit seinen ganzen
Bugs und anderen Problemen.
Ich werde jetzt das PCB-Layout nochmal komplett neu machen und natürlich
alle nötigen Kondensatoren einbauen.
Auch an alle anderen vielen Dank, ich mach mich mal an die Arbeit und
werde die ganzen Hinweise einarbeiten. Man lernt nie aus, danke fürs
Unterrichten und viel Spaß mit dem Comic;)
http://dilbert.com/strip/2015-04-02
quirlmalve schrieb:> Ich werde jetzt das PCB-Layout nochmal komplett neu machen und natürlich> alle nötigen Kondensatoren einbauen.
.... und wenn du es wirklich gut machen willst dann lass dir
vor dem Layouten vom Forum hier den Schaltplan diskutieren
und beim Layouten hier auch laufend das Layout. Denn mit
deinen geringen Erfahrungen wirst du noch etwas Unterstützung
brauchen. Die Einsicht dazu hast du ja wenigstens schon ....