Forum: Mikrocontroller und Digitale Elektronik Errata-Sheet SAMD10/11


von Mike (Gast)


Lesenswert?

Hallo,

weiß jemand, wo ich ein aktuelles Errata-Sheet für SAMD10 bzw. SAMD11 
finden kann? Bei Microchip bin ich leider nicht fündig geworden.

Ich habe ein Problem mit dem ADC, der mir gelegentlich unerklärbare 
Overruns liefert.

Der ADC soll mit 160 Kilosamples pro Sekunde laufen. Ich habe dazu den 
Timer TC2 so programmiert, dass er alle 300 Takte einen Event an den ADC 
schickt. Bei 48MHz sind das genau 160kSps. Das ganze funktioniert für 
ca. 10-20 Sekunden so wie erwartet, dann hängt sich der ADC plötzlich 
mit einem "data overrun" auf. Die Problemem treten sowohl beim SAMD10 
als auch beim SAMD11 auf. Nach mehrren Tagen vergeblicher Fehlersuche 
fand ich im SAMD21-Errata Sheet folgenden Hinweis:

> 1.17 Timer/Counter (TC)
> 1.17.1 Spurious TC Overflow
> Spurious TC overflow and Match/Capture events may occur.
>
> Workaround
> Do not use the TC overflow and Match/Capture events. Use the corresponding 
interrupts instead.

Wenn dieser Fehler auch bei den "kleinen" Controllern auftritt, könnte 
das die Ursache für mein Problem sein?

PS: Das Errata-Sheet ist hier:
http://ww1.microchip.com/downloads/en/DeviceDoc/SAMD21-%20Family-Silicon-%20Errata-and-DataSheet-Clarification-DS80000760C.pdf

von Stromverdichter (Gast)


Lesenswert?

Mike schrieb:
> 160 Kilosamples pro Sekunde laufen.

dann prüfe halt das ResultReady flag, lese dann das Datenregister und 
starte dann die nächste Wandlung. Ein Overrun sollte dann nicht 
vorkommen.

von Stromverdichter (Gast)


Lesenswert?

Oops, du verwendest das Event-System, sorry, da kann ich nicht helfen.

von Mike (Gast)


Lesenswert?

Stromverdichter schrieb:
> Oops, du verwendest das Event-System, sorry, da kann ich nicht
> helfen.

Ja, die Events sollen eine möglichst regelmässiges und jitterfreies 
Sampling ermöglichen.
Ich habe es jetzt über den ADC-Interrupt probiert, es scheint zu 
funktionieren. Bei jedem Interrupt-Aufruf setzte ich Result-Ready usn 
Overrun-Flag zurück. Allerdings verbrauchen die 160.000 Interrupts pro 
Sekunde doch einen nicht ganz unerheblichen Anteil der zur Verfügung 
stehenden CPU-Leistung. Statt die Resultate "händisch" auszulesen, 
wollte ich das eigentlich per DMA im Hintergrund erledigen.

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
Noch kein Account? Hier anmelden.