JesperKonge skrev:
Har lige kigget dokumentationen for innovative dl-32 igennem. Den logger hver 81.92 millisekund.
Så hastigheden kan faktisk blive hurtigere for en arduino-løsning... men jeg har lidt problemer når jeg kommer over 20 gange pr. sek. Så kan den (min kode) ikke rigtig styre at jeg har sat 2 seriel-porte op... Så der begynder LCD'en at lave "fejl-pixel's". men loggen på SD-kortet er stadig intakt.
Hvis du bruger LiquidCrystalLCD library (eller afarter heraf), så kan du optimere koden lidt i den og få _klart_ hurtigere respons på dit LCD.
Kig på de delays der er i PulseEnablePin.. Hvordan kan man optimere på dem?
..og hvis du bruger SetCursor eller CursorTo, så er det markant hurtigere at skrive direkte til controlleren på displayet med lcd.commandwrite.
lcd.CommandWrite(0x80); -> Line=0 pos 0
lcd.commandWrite(0xC0+val); -> Line=1, Cursor val
lcd.commandWrite(0x94+7); ->Line=2, Cursor 7
lcd.commandWrite(0xD4); -> Line=3, Cursor 0
Du skal dog være opmærksom på om begrænsningen ligger i selve displayet eller i controlleren.. De røde displays jeg har arbejdet med er LANGSOMME.. De grønne er de hurtigste jeg har oplevet.
Der er en bruger på arduino forummet der har afprøvet hastigheden af ovenstående ændringer. Gik fra 685ms til 4.5ms..
I mit projekt logger jeg fra 3 sensorer (Rail, Turbo og Lambda). Jeg kan dynamisk (via menu) ændre delay'et for hvert gennemløb. pt. bruger jeg 300ms delay ellers skifter talene på displayet alt for hurtigt til man rigtig kan bruge det til noget. Derudover kører mine AD konverteringer med sliding window (som jeg også kan ændre dynamisk). pt tager den 10 målinger per vindue. (Dermed totalt 30 samples per gennemløb).
Skal jeg logge til seriel eller SD sættes delay'et til 80ms, der passer rimeligt godt med 10 log entries (som så er gennemsnit af 10 målinger per sensor) per sekund. Det er IMHO rigeligt til at få gode logs med.
EDIT: Atmega chippen tager 100us for en konvertering, jeg aflæser 10 gange per sample, det er 1000 us eller 1ms per sensor. ADC aflæsningen for mine 3 sensorer tager derfor 3ms. Med delay på 80ms får vi så 0,083 sek per gennemløb (uden at tage højde for de andre ordrer jeg benytter i loopet). Det vil sige 12 gange i sekundet - det passer ret godt med 10 gange i sekundet når man tager mine andre ordrer med i regnskabet.
Sætter jeg delay til 0 bør jeg få 333 gennemløb per sekund - hvis vi ikke tager højde for den tid det tager at sende data på seriel'en..