mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Comparator Attiny841


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Paul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo
versuche immer noch den Comparator AC1 des Attiny 841 zu betreiben.
Verwende diesen Code:
void init_AC()
  {
  ACSR1A &=~(1<<ACD1);            // AC Analog Komparator einschalten, ADC aus
  ACSR1A |=(1<<ACO1);              // analog Comparator Ausgang
  ADMUXA |=((1<<MUX5)|(1<<MUX4)|(1<<MUX2));  // Eingang neg ADC2, pos ADC3    
  ACSR1B |=((1<<HSEL1)|(1<<HLEV1));      // Hysterese 50mV 
  ACSR1B |= (1<<ACOE1);            
  }
Die Auswertung erfolgt damit:
if (ACSR1A &(1<<ACO1))  // Register ACSR1A          
        {
        PORTA &=~(1<<PINA0);        // LED 2 aus
        }
      else
        {
        PORTA |=(1<<PINA0);          // LED 2 ein
        }
Hatte bereits in einem anderen Teil gefragt. Es läuft soweit auch. Wenn 
ich den Regler von GND nach Vcc drehe schaltet die LED um. Leider 
flackert sie mehrfach und beim weiterdrehen schaltet sie dann vollkommen 
um. Leider finde ich den Grund nicht dafür.
Ist ein Fehler im Programm oder habe ich ein Register vergessen?
Vielleicht könnte sich das mal jemand ansehen.
Paul

Autor: Paul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kann jemand helfen?

Autor: HildeK (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Paul schrieb:
> Wenn ich den Regler

Welchen Regler? Ein Poti? Ist das auch in Ordnung und nicht verdreckt? 
Hast du am Schleifer einen Kondensator? Ist deine Versorgungsspannung 
stabil?

Ich kenne zwar den 841 nicht und die, die ich in Gebrauch habe, haben 
keine einstellbare Hysterese, aber offenbar reicht die für die Qualität 
des Eingangssignal nicht aus.

Autor: Paul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Verwende ein einfachen neuen Einstellregler. Habe gemessen das die 
Spannung nicht springt sondern langsam ansteigend ist. Haben keinen 
Kondensator dran, muss da einer sein? Die Betriebsspannung ist stabil. 
Werde die Spannungen noch mal überprüfen.

Autor: Theor (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Paul schrieb:
> Verwende ein einfachen neuen Einstellregler.

Ich bezweifele stark, dass Du einen "Regler" verwendest. Bitte überprüfe 
das nochmal und nenne uns ggf. den Typ des Reglers.

Ein "Regler" ist eine Vorrichtung bzw. Schaltung, die einen Ist-Wert mit 
einem Sollwert vergleicht, und abhängig davon, einen Wert (z.B. eine 
Spannung) ausgibt, die ein Stellglied beeinflusst.
Siehe: https://de.wikipedia.org/wiki/Regler_(Begriffskl%C3%A4rung)

Ein "(Ein-)Steller" ist z.B. ein Potentiometer. Damit stellst Du z.B. 
eine Spannung ein.
Siehe https://de.wikipedia.org/wiki/Steller

Umgangssprachlich wird dazwischen oft nicht unterschieden. Häufig wird 
jedes drehbare Bedienelement als "Regler" bezeichnet. Aber wir sind hier 
in einem Forum unter Technikern, in dem wir uns bemühen, uns präzise 
auszudrücken. Da haben die Begriffe viel engere Bedeutungen, damit 
völlig klar wird, was gemeint ist.

Vermutlich wird Dein Potentiometer mehr als 50mV springen oder rauschen, 
so das die Hysterese nicht groß genug ist. Dagegen hilft ein anderes 
Potentiometer, (evtl. eine Reinigung oder Reparatur des vorhandenen) 
oder eine externe Schaltung mit einem Komparator.
Es kann aber tatsächlich auch sein, dass die Betriebsspannung von dem 
Einstellvorgang beeinflusst wird (oder auch etwas anderes die Spannung 
beeinflusst).
Ebenso kann es sein, dass Dein Code für das Flackern verantwortlich ist.

Bitte poste einen vollständigen Schaltplan.
Bitte poste den vollständigen Code (als Anhang).

Beitrag #6028006 wurde von einem Moderator gelöscht.
Beitrag #6028016 wurde von einem Moderator gelöscht.
Autor: Tierfreier Nichtraucher (Gast)
Datum:

Bewertung
-5 lesenswert
nicht lesenswert
Theor schrieb:
> Paul schrieb:
>> Verwende ein einfachen neuen Einstellregler.
>
> Ich bezweifele stark, dass Du einen "Regler" verwendest. Bitte überprüfe
> das nochmal und nenne uns ggf. den Typ des Reglers.

Mein Gott, die Sprüche...

Belehrst Du den Verkäufer im Elektronik-Geschäft auch auf diese Weise?
Dann würde ich Dich bei Kopf und Arsch packen und draußen kämest Du zu 
liegen!

Autor: Paul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danach ist ein Steller vom der Firma Peha, Grösse P15 mit 22k Ohm und 
zusätzlicher Achse

Autor: Matthias S. (Firma: matzetronics) (mschoeldgen)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Paul schrieb:
> Haben keinen
> Kondensator dran, muss da einer sein?

Es kann sicher nicht schaden, den Schleifer mit einem RC Tiefpass vor 
dem Komparatoreingang zu glätten und zu puffern. Das hält Einstreuungen 
auf die Potidrähte fern, mittelt das Poti ein wenig und buffert die 
Messspannung.

Autor: Paul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kommt haltet euch ein bisschen zurück. Er hat soweit Recht das kein 
Regler im Sinne einer Temperatur Regler oder ähnliches ist.
Es ist ein "Regler" der durch eine mechanische Drehbewegung eine 
Spannung von 0 (GND) bis zur vollen Spannung von 5V (Vcc) einstellt und 
durch einen Prozessor mit einer Vergleichsspannung mit einem AC (analog 
Comparator) vergleicht und einen Ausgang schaltet.
Damit dürfte die Diskussion um eine korrekte Bezeichnung beendet sein.
Es ist weitaus hilfreicher wenn man sich nicht in diese 
Bezeichnungdiskussion einlässt und lieber mit etwas konkreten zum 
Problem bei beiträgt.

Autor: Paul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Muss es ein RC Glied sein oder reicht ein 100nF aus?

Autor: Matthias S. (Firma: matzetronics) (mschoeldgen)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Paul schrieb:
> Muss es ein RC Glied sein oder reicht ein 100nF aus?

Der Schleifer des Potis bildet halt je nach Stellung einen mehr oder 
weniger grossen R zum Aufladen des Kondensators. Ich bevorzuge einen 
extra R, damit ich den Tiefpass einigermassen passend rechnen kann, ohne 
mich gross um die Quellimpedanz (des Potis) zu kümmern.
Sicher ist aber ein Kondensator statt keinem Kondensator ein grosser 
Fortschritt. Müssen auch keine 100nF sein, da gehen auch 22nF oder 10nF.

Autor: Theor (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tierfreier Nichtraucher schrieb:
> [...]
>
> Mein Gott, die Sprüche...
>
> Belehrst Du den Verkäufer im Elektronik-Geschäft auch auf diese Weise?
> Dann würde ich Dich bei Kopf und Arsch packen und draußen kämest Du zu
> liegen!

Eine gewaltsame Handlungsweise, der ich mich mit angemessener, von der 
Notwehr gemäß §32 StGB erlaubter Gegengewalt, erwehren, und die eine 
Strafanzeige nach sich ziehen würde.

Falls Du fundierte, - auch emotional fundierte, aber dennoch höfliche -, 
Kritik, an meiner Art mich auszudrücken, vorbringen willst, wäre ich Dir 
dafür (voraussichtlich) dankbar.
Die Erwähnung von Gewalt als denkbare Reaktion auf mein Verhalten halte 
ich jedoch für unangemessen.

Falls Du in Off-Topic eine entsprechende Kritk vorbringst, werde ich 
unter gewissen Voraussetzungen (die oben erwähnten) darauf eingehen.

Autor: Theor (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Paul

Ergänzend zu Matthias Beitrag:
Nur den abgegriffenen Widerstand des Potentiometers als Widerstand des 
Tiefpasses zu benutzen, hat den Nachteil, dass die Grenzfrequenz vpm der 
Stellung des Potentiometers abhängt.

Im übrigen gibt es hier keine "Diskussion" um den Unterschied zwischen 
"Steller" und "Regler". Sie wäre völlig unnötig, da die Begriffe klar 
definiert und voneinander abgegrenzt sind.

Ich möchte hinzufügen, dass mir nicht daran liegt, irgendeinen 
emotionalen Gewinn daraus zu ziehen, Dich herabzusetzen, weil Du einen 
Unterschied nicht kennst. Es geht mir vielmehr darum, zu erreichen, dass 
Du den Unterschied kennst und aus Deinem Wissenzuwachs erwüchse mir ein 
positiver emotionaler Gewinn.

Der Unterschied ist nämlich durchaus auch von sachlichem Belang. Falls 
Du einen Regler verwendest, würde man an der Differenzbildung arbeiten 
müssen. Das ist eine andere Baustelle.

Autor: Paul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Soweit alles klar. Werde einen Kondensator an den Anschluss legen.
Kann einer sagen ob ich am Code was falsch habe?

Autor: Veit D. (devil-elec)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
Hallo,

es wurde dir doch schon gesagt das deine Hardwarebeschaltung so nicht 
funktioniert mit Nutzung des Komparators - wegen der Pinbelegung. Der 
Aufbau ist in meinen Augen auch überflüssig.

a) setze einen einstellbaren OPV Komparator vor einen digitalen Eingang
oder
b) schließe das Poti an einen analogen Eingang an und lasse den Rest weg

In beiden Fällen bist du in allen Belangen maximal flexibel was die 
Eintellungen betrifft. Bei a) in Hardware und bei b) in Software. b) 
wäre der Grund warum man einen programmierbaren µC verwendet.

Autor: Paul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Veit D. schrieb:
> Hardwarebeschaltung so nicht
> funktioniert mit Nutzung des Komparators - wegen der Pinbelegung

Gemäss Datenblatt des Attiny 841 verfügt er über 2 Comparatoren. An AC0 
ist die Belegung durch den Hersteller festgelegt und die Pins dazu 
vergeben. Beim AC1 kann durch die MUX der Eingang negativ und positiv 
gemäss Tabelle eingestellt und genutzt werden. In der Tabelle im 
Datenblatt sind dazu die verschiedenen Möglichkeiten aufgelistet.

Autor: c-hater (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Paul schrieb:

>
> void init_AC()
>   {
>   ACSR1A &=~(1<<ACD1);            // AC Analog Komparator einschalten, 
> ADC aus
>   ACSR1A |=(1<<ACO1);              // analog Comparator Ausgang
>   ADMUXA |=((1<<MUX5)|(1<<MUX4)|(1<<MUX2));  // Eingang neg ADC2, pos 
> ADC3
>   ACSR1B |=((1<<HSEL1)|(1<<HLEV1));      // Hysterese 50mV
>   ACSR1B |= (1<<ACOE1);
>   }
> 

Das ist immer noch nicht ganz korrekt. Diese Zeile ist komplett 
überflüssig:

>   ACSR1A |=(1<<ACO1);              // analog Comparator Ausgang

Du beschreibst da ein Bit, was nur gelesen werden kann (erkennst du im 
DB daran, dass in der Registerbeschreibung unter dem Bit nicht "RW" 
steht, wie bei den meisten anderen, sondern "R".

Zu deinem Glück ist aber das Beschreiben eines nur lesbaren Bits völlig 
folgenlos. Nützt nix, schadet aber auch nicht...

> Wenn
> ich den Regler von GND nach Vcc drehe schaltet die LED um. Leider
> flackert sie mehrfach und beim weiterdrehen schaltet sie dann vollkommen
> um. Leider finde ich den Grund nicht dafür.

"Potikratzen" und/oder eingestreute Störungen größer als die Hysterese 
des AC. Ein übliches Gegenmittel wurden im Thread bereits genannt: 
Tiefpass.

Autor: Paul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo
habe ins DB geschaut. Du hast recht, es steht ein R da und habe es dann 
auskommentiert.
Habe mal die Spannungen gemessen. Bei U/2 stehen 2,48V an, als Vcc habe 
ich 4,97V. Nach dem Messgerät sind sie relativ stabil, konnte keine 
Einbrüche sehen. Habe dann am Schleifer des Potis (Regler oder Steller) 
einen 100nF Kondensator nach GND eingelötet, geht am schnellsten. Der 
Comparator Eingang scheint sehr Empfindlich auf Einstreuungen zu sein. 
Im Bereich von ca. 1,1V bis ca. 3,9V reagiert er auf meine Hand. 
Teilweise brauche ich die Platine nur anzufassen. Ist der Comparator so 
Empfindlich?
Zu dem Tiefpass, noch einen Widerstand zwischen Schleifer und Prozessor 
und noch einen zweiten Kondensator, alles zusammen als Pi Glied? Wenn 
die zwei Kondensatoren je 100nF haben, welcher Widerstand am besten. 
Dachte dabei an 1kOhm oder das Poti kleiner machen?

Autor: c-hater (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Paul schrieb:

> Ist der Comparator so
> Empfindlich?

Ja, der hat Eingangswiderstände im Bereich von 100MΩ. Da genügen 
geringste eingetragene Energien, um erhebliche Spannungen zu 
produzieren. Ganz so schlimm ist es bei dir aber nicht, die Eingänge 
werden ja durch ihre jeweiligen Quellen belastet.

> die zwei Kondensatoren je 100nF haben, welcher Widerstand am besten.
> Dachte dabei an 1kOhm oder das Poti kleiner machen?

All die Tips im Thread sind prinziell richtig, berücksichtigen aber 
nicht, dass du ZWEI extrem hochohmige Eingänge hast, zwischen denen 
die Differenzbildung erfolgt.

Die Filter für sowas sehen sinnvollerweise etwas anders aus "normal". 
Denn die Störungen können aus beiden Richtungen kommen. Statt für jeden 
der beiden Eingänge Tiefpässe nach Masse vorzusehen, benutzt man hier 
sinnvollerweise einen Hochpass zwischen den beiden Eingängen...

Sprich: In der allereinfachsten Form einen simplen Kondensator. Wert so 
ungefähr im Bereich einiger zehn pF bis einige (wenige) nF dürfte 
passen. Kommt natürlich auch darauf an, was da eigentlich an Störungen 
reinkommt und wie die Impedanz der beiden Signalquellen ist. Wenn man 
keine Lust zum Rechnen und Messen hat, probiert man einfach. Als Bastler 
darf man das...

Autor: Paul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
An den anderen Eingang habe ich gar nicht gedacht. Der hochomige Eingang 
war mir schon klar, doch solche Auswirkungen habe ich nicht erwartet.
Kann dann aber annehmen das mein Programm korrekt ist und der Effekt an 
der Platine bzw. Eingänge liegen.

Autor: Paul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gilt das gleiche auch für ADC? Bei einer Messung mit ADC scheint es 
unempfindlich zu sein.
In einer Tabelle im DB steht es auch drin.

Autor: Peter D. (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Paul schrieb:
> ADMUXA |=((1<<MUX5)|(1<<MUX4)|(1<<MUX2));  // Eingang neg ADC2, pos
> ADC3

Was ist an ADC2 und an ADC3?
Zeichne mal einen Schaltplan.

Autor: Matthias S. (Firma: matzetronics) (mschoeldgen)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Paul schrieb:
> Gilt das gleiche auch für ADC? Bei einer Messung mit ADC scheint es
> unempfindlich zu sein.

Wenn man den Bereich von 0-5V mit einem 10-Bit ADC auswertet, bleiben 
pro Bit etwa 5mV (5000mV / 1024). Das ist sehr viel mehr als bei der 
Schwelle des Komparators, der schon bei ein paar dutzend µV hin- und her 
springt.

Deswegen zappeln Komparatoren gerne mal in der Nähe der Schwelle und 
deswegen sollte man in Software auch die Plausibilität prüfen.

Autor: Peter D. (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Paul schrieb:
> ADMUXA |=((1<<MUX5)|(1<<MUX4)|(1<<MUX2));  // Eingang neg ADC2, pos
> ADC3

Aber auch nur, wenn ACME1 = 1 und ADEN = 0.

Autor: Paul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
An ADC2 habe ich einen Spannungsteiler mit 2x 10kOhm und der Pin hängt 
an der mitte, damit ergeben ca. 2,5V. Am ADC3 habe ich ein 
Einstellregler mit Achse (Poti) mit 22k Ohm und das liegt an GND und Vcc 
und der Schleifer am ADC. Damit kann ich eine Spannung zwischen GND und 
Vcc einstellen. Habe jetzt einen 100nF C nach GND geschaltet um 
Einstreuerungen zu verhindern.

Autor: Peter D. (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Paul schrieb:
> An ADC2 habe ich einen Spannungsteiler mit 2x 10kOhm und der Pin hängt
> an der mitte, damit ergeben ca. 2,5V.

Der Spannungsteiler muß aber an AIN10. Der MUX schaltet nur den 
negativen Eingang um. Ich würde mal vermuten, für den Komparator sind 
nur die single-ended Settings valid.

"Bit 2 – ACME1: Analog Comparator Multiplexer Enable
When this bit is set and the ADC is switched off (ADEN in ADCSRA is 
zero), the ADC multiplexer is selected as the
negative input for the analog comparator."

Autor: Paul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Peter
gilt das auch für den AC1? In der Tabelle sind doch alle möglichen 
Kombis dazu drin. Werde das heute abend kontrollieren. Im DB des 
Herstellers sind ja die AIN? angegeben.

Autor: Peter D. (peda)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Ich würde mal behaupten, daß
Figure 15-1. Analog Comparator 1 Block Diagram
und
Table 15-1. Analog Comparator 1 Input Options
korrekt sind.

Mein Eindruck ist auch, daß die Qualität der AVR-Datenblätter 
nachgelassen hat.

Autor: Veit D. (devil-elec)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Peter D. schrieb:
> Mein Eindruck ist auch, daß die Qualität der AVR-Datenblätter
> nachgelassen hat.

Das kann ich mit ruhigem Gewissen bestätigen. Mir fiel das in den Timer 
Kapiteln auf. Die Register und Bit Einstellungen sind nicht mehr so 
schön lesbar wie vorher. Zuviele n und x Angaben. Merkt natürlich nur 
der der die alten noch hat. Hauptsache es wurde einige Diagramme bunt 
gefärbt.

Autor: Paul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Meine die Tabelle 16-3. Dort sind alle Kombinationen des AC1 für die 
Einstellungen ADC des Multiplexers angegeben. Mit dem AC0 geht das 
nicht.

Autor: Paul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry, entschuldige die blöde Frage. Hatte ACME=1 nicht drin. Habe jetzt 
dazu geschrieben:
ACSR1B |=(1<<ACME1);  
Habe dazu das DB konsultiert und versucht rauszukriegen was das genau 
macht.
Es wird dann ADEN ausgeschaltet und ACME eingeschaltet. Nach Tabelle 
15-5 wird dann der Multiplexer nach Tabelle 16-3 negativ eingeschaltet. 
Stimmt das so?
Hast du mal Zeit für ein ganz andere Frage.
Du hast mal eine Tasterentprellung ohne Timer vorgestellt. Ist 
allerdings schon lange her (Relativ lange). Arbeite auch gerade daran. 
Scheiter aber dabei. Problem:
Möchte 5 Taster per I2C vom slave übertragen. Dabei können jede Taste 
mit einer oder mehreren gleichzeitig gedrückt werden. Die Auswertung 
welche tasten gedrückt wurden erfogt im Master. Ich muss aber genau 
auswerten welche Taste gedrückt wurde und das mit Entprellung. Da alles 
auf einem Ati 841 laufen soll, ist der Platz leider begrenzt.
Hast du eine Idee dazu?
LG Paul

Autor: c-hater (Gast)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
Paul schrieb:

> Meine die Tabelle 16-3. Dort sind alle Kombinationen des AC1 für die
> Einstellungen ADC des Multiplexers angegeben. Mit dem AC0 geht das
> nicht.

Du hast dein Kernproblem immer noch nicht begriffen: Du hast an keiner 
Stelle dem AC1 gesagt, dass er den Multiplexer überhaupt benutzen soll. 
Ich habe dir im Vorgänger-Thread gesagt, dass du das tun musst, um 
überhaupt zwischen den beiden von dir gewünschten Pins die Differenz 
messen zu können.

In diesem Thread hat einer (nämlich Peda) besser aufgepaßt als ich, und 
festgestellt, dass du das dem AC1 immer noch nicht sagst.

Feststellung: du bist weiterhin offensichtlich vollständig 
lernresistent. Und damit bin ich auch hier schon wieder raus...

Autor: Paul (Gast)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
Sorry, jetzt verstehe ich deine Worte nicht. Habe das von Peter sofort 
eingebaut und damit getestet. Die Anzeige ist vollkommen ruhig geworden, 
kein flackern oder ähnliches. Habe dann im DB versucht mehr über die 
Funktion zu erfahren. Dort wird auf eine Tabelle verwiesen mit den 
Einstellungen dazu und auf eine weiter mit den Angaben zu den ADC.
Wie kommst du darauf das lernresistent bin?
Das ist drin und wollte nur noch was zur Funktion haben. Was ist daran 
verkehrt?

Autor: foobar (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Noch ein Hinweis: Es reicht nicht, nur Bits zu setzen wenn einige auch 
gelöscht sein müssen (z.B. ADMUXA, ACSR1B, ...).

Autor: Hannes (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Paul

Tasten entprellen - warum machst Du das nicht mit Hardware?
Das ist einfacher als per SW.

Und die Auswertung und Plausibilitätsprüfung erfolgt ja im Master und 
Dasia ist eh' die grössere Herausforderung denke ich.

Autor: Peter D. (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
[OT]

Paul schrieb:
> Du hast mal eine Tasterentprellung ohne Timer vorgestellt.

Diese Macro-Lösung sollte man nur bei sehr kleinen Programmen verwenden. 
Sie hat einige Seiteneffekte, die bei größeren Applikationen stören 
könnten.

Paul schrieb:
> Die Auswertung
> welche tasten gedrückt wurden erfogt im Master.

Für so eine popelige Aufgabe einen extra MC abzustellen, sollte schon 
triftige Gründe haben, z.B. sehr lange Zuleitungen.
Vermutlich wird das nötige I2C-Protokoll deutlich mehr Code benötigen, 
als das simple Einfügen der Entprell-Lib in den Master.
CPU-Zeit wird auch keine eingespart. Im Gegenteil, der Master muß ja den 
I2C-Slave ständig pollen.

Paul schrieb:
> Da alles
> auf einem Ati 841 laufen soll, ist der Platz leider begrenzt.

Die Entprell-Lib mit Timer schätze ich mal mit ~100 Byte Flash ab.
Was muß der denn sonst noch alles machen, um so einen riesigen 8kB Flash 
zu füllen?

Bei mehr Fragen dazu, mach nen eigenen Thread auf.

: Bearbeitet durch User
Autor: Paul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Peter
da der Ati 841 einen I2C Slave hat möchte ich damit verschiedene 
Platinen machen, die kleine Aufgaben erfüllen sollen. Das geht von 
Joystick Steuerung über Taster bis zu Messungen und Encodern. Es sollen 
Teile sein die im Grunde nicht über einen I2C Bus verfügen. Es sollen 
dabei Teilaufgaben gelöst werden, wobei auch Aufgaben übernommen werden. 
Sie können dabei als eigenständige Module oder Slaves genutzt werden.
Die gesamte Steuerung und Auswertung soll dabei vom Master übernommen 
werden. Displaysteuerung, z.B. Farb TFT oder Servo oder Schrittmotor.
Es gibt ein StartUP die solche Module produzieren, allerdings mit einem 
PIC. Beim einer vernünftigen Planung am Bus kann ich damit die 
verschiedensten Aufgaben erfüllen.
Wollte die 5 Tasten wie ein Bedienkreuz verwenden. Wenn dabei aber 
mehrere Tasten gleichzeitig gedrück werden muss ich das zuverlässig 
erkennen und übertragen.
Gern mache ich dazu was neues auf. In der Hoffnung das du mal 
reinschaust.
LG Paul

Autor: Paul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo footbar
Danke für die Info. Im DB sind einige Register auf 0 gesetzt. Wenn ich 
da von Teile verwende muss ich sie doch auf 1 setzen. Die Register die 
bereits auf 0 stehen brauche dabei nicht zu ändern. Meinst du das?

Autor: foobar (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Die Register die bereits auf 0 stehen brauche dabei nicht zu ändern.
> Meinst du das?

Nein.  Bits, die du auf 0 haben möchtest (z.B. MUX0), musst du auch auf 
0 setzen - mit |= geht das nicht.  Der Unterschied zwischen:
   ADMUXA |= (1<<MUX5)|(1<<MUX4)|(1<<MUX2);  // MUX0/1/3 unverändert
und
   ADMUXA  = (1<<MUX5)|(1<<MUX4)|(1<<MUX2);  // alle MUXx verändert

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.