Erste Anfänge mit C und AVR

Hallo Kani,
Das ist aber eine Menge Text. Geht das nicht noch einfacher?

für eine Softwarelösung ist sowohl Dinos Assemblerbeispiel, wie auch Rangars C-Beispiel schön kurz gehalten und sauber programmiert.

Noch etwas kürzer wird der Code wahrscheinlich, wenn man die OutputCompare-Funktion der AVR-Timer-Module nutzt. Der Code beschränkt sich hierbei auf die einmalige Timer-Initialisierung und die Änderung des PWM-Verhältnisses im Programmablauf durch Schreiben in die entsprechenden Compare-Register. Man kann hier PWM mit sehr kleinen Periodendauern erzeugen, ohne daß der Programmablauf dadurch beeinträchtigt wird, keine Auslastung des AVRs, dein Programm kann andere Sachen abarbeiten, zum Beispiel Tasten auswerten o.ä.

Ich hatte mal mit einem ATtiny2313 drei PWM-Kanäle (zwei Timer wurden genutzt) für Ansteuerung eines LED-Ringlichts und zweier selektiver LED-Lampen zur einstellbaren Ausleuchtung eines Meßtisches mit Kamerasystem gebastelt. PWM mittels Timer-Modul unterstützen auch schon kleinere AVRs. Für ganz schnelle PWM mit hoher Auflösung gibts die AT90PWMx AVR-Mikrocontroller, für die Ansteuerung von LEDs reicht aber auch ein ganz einfacher AVR. Das Timer-Modul muß nur die OutputCompare-Funktion unterstützen.

Grüße,
Dirk
 
Hi Kani,
Ich glaube ihr werdet an mir noch verzweifeln. -.-
Mal sehn :D

Ich finde dieses Tutorial auch sehr gut.
http://www.mikrocontroller.net/articles/Soft-PWM
Wie schreibe ich mir ein Lauflicht, bei dem LEDs immer langsam auf-/abdimmen?
Vor allem solltest Du aufhören zwischen mehreren Beispielroutinen hin und
her zu springen. Such dir eine aus und versuch sie zu verstehen.
Wenn Du dauernd deine Beispiele wechselst, an denen du dich orientierst
verwirrt dich das mehr als es nützt.

Fang damit an eine Programm-Grundstruktur (noch ohne Funktion)
aufzubauen. Nur Definitionen vom Prozessortyp und was man so bei C
noch braucht.

Danach definier dir deinen Ausgangsport und lass erst mal ein, zwei,
mehrere LEDs blinken. Später mit verschiedenen Blinkraten.

Mach mal einen Byte-Zähler, der auf den 8 LEDs von dem Port ausgegeben
wird. Dann siehst du die 8 Bits des Zählers auf den LEDs.

Dann definier dir einen Eingangsport mit Tastern und gib das eingelesene
Byte (die Tasten) an deinem Ausgangsport wieder raus. Mach dir dabei
noch keine Gedanken über Tastenentprellung.

Jetzt kannst Du verschiedene Vergleich- und andere Logische Operationen
zwischen deinem gelesenen Byte von den Tasten und deinem Zähler auf
dem Ausgangsport ausgeben. Spiel mit den Befehlen rum.

Fang klein an und erweiter deine Programme nach und nach. Bei einem
Haus baut man auch nicht zuerst das Dach.

Als Tip: Versuch deine ersten Programme ohne irgendwelche Interrupts
oder Timer oder was anderes zu bauen. Benutze zuerst nur die
normalen Ein- und Ausgangsports. Der Rest kommt dann später dazu.
Für die Timer, USARTs, ADC, ... solltest du dir die enntsprechenden
Kapitel im Datenblatt (die Lange 300Seiten-Version) genau ansehen.
Die ersten paar Kapitel mit dem Registeraufbau, Speicher, usw
(also die allgemeinen Sachen) sind sowieso Pflicht. Versuch dabei
die internen Vorgänge im uC zu verstehen.
Ich habe da den Vorteil gehabt, mit nem ZX81 und ZXSpectrum
angefangen zu haben. Da kam man zwangsweise mit der Hardware
in Kontakt.

@Dirk: Diesmal ohne "Off-Toppic-Assembler" :D

Gruß
Dino
 
Okay, danke. Du hast Recht.
Ich werde mir mal noch ein paar Sachen raussuchen.
 
Wie wäre es mit dem Anfänger-Projekt welches ich oben beschrieben habe?
Hier nochmal:

Ich habe eine Glas-Vitrine mit 4 Böden. Auf jedem Boden, soll in der Reihenfolge
Blau, Rot, Grün <5 cm Platz> Blau, Grün <5cm Platz> Grün, Rot, Blau Leds hochstrahlen. Also 4x8 = 32 Leds. (8 Rote, 12 Blaue, 12 Grüne = 32)
Jede Farbe jeder Ebene soll dann einzeln ansteuerbar sein (=Drei Farben je Ebene + 4 Ebenen = 12 Ausgänge)
Also brauch ich sehr viele PWM-Kanäle.
Später soll es dann für jede Ebene fertige Programme geben, die mittels eines (oder mehrerer) Taster aufgerufen werden. Später dann vllt. noch 7-Segment-Anzeige für den Namen (bzw. der Zahl) des aktuellen Programmes, IR-Empfänge, Mikrofon usw.

Aber erstmal back to the roots. Geht das so wie ich mir das vorgestellt habe? Mikrocontroller wird ein ATMEGA 8515-16 D sein.
 
Ich möchte mir diese 7-Segment-Anzeige selber bauen. Aus LEDs natürlich.
8 LEDs bekomm ich ja an Port A. Bzw. habe ich jetzt schon.
Was hast das mit den Multiplexen auf sich?
 
Hi Kani,

Für 7-Segmentanzeigen braucht man aber nur 7 LEDs (für jedes Segment eine)
Darum heißen die auch so :D

Das mit dem multiplexen ist ganz einfach ...

Was machst du wenn du 2 Stellen anzeigen willst ?
Also z.B. nicht nur 0 bis 9 sonder 00 bis 99 ...
Dann nimmst du natürlich 2 Stück 7-Segment-Anzeigen.
Das macht dann 14 Leds an 14 Ausgängen. Ganz schöne Verschwendung!

Also legt man die gleichen Segmente aller Anzeigen zusammen.
Also alle A-Segmente zusammen, alle B-Segmente, ...
Und nun hat jede 7-Segment-Anzeige noch einen gemeinsamen
Anschluß für alle Segmente dieser Stelle. Das ist dann je nach
Anzeige entweder eine gemeinsame Anode oder eine gemeinsame
Kathode.

Jetzt hast du also bei dieser Verdrahtung jeweils einen Anschluß
pro verschiedenem Segment (macht dann 7 Anschlüsse fü 7 Segmente)
und pro Anzeige-Stelle einen einen Anschluß für alle Segmente dieser
Stelle (bei 2 Stellen also 2 Anschlüsse). Damit benötigst du jetzt
statt 14 Anschlüssen nur noch 9. Hat sich doch gelohnt :pleasantry:

Wir nehmen mal an du hast Anzeigen mit gemeinsamer Anode.
Du legst also die Ausgangspins der Segmente, die leuchten sollen
auf Masse (das sind ja die Kathoden der Leuchtdioden in der Anzeige)
und damit nicht beide Anzeigen das selbe anzeigen legst du nur
den Ausgang für den gemeinsamen Anschluß einer Anzeige auf High.
Danach legst du die Werte für die Segmente der anderen Anzeigestelle
an die Ausgangspins und schaltest dann nur die andere Anzeige an.

Mit den gemeinsamen Anschlüssen der Anzeige aktivierst du also die
jeweilige Anzeigestelle und mit den Pins für die Segmente das
entsprechende Segmen aller Anzeigen.

Du hast mit deinen LEDs der Anzeigen also eine Matrix aufgebaut.

Sieh mal hier ...
http://www.klaus-leidinger.de/mp/Mikrocontroller/7Segment/7Segment.html
oder hier ...
http://www.avr-praxis.de/forum/showthread.php?t=69
oder hier ...
http://members.ziggo.nl/electro1/avr/7segments.htm

Beim ERSTEN Link ist die Zusammenschaltung der Anzeigen am besten
zu sehen.

:hello: :hello: :hello: :hello: :hello:
Oder sieh dir mal die Animation auf dieser Seite an...
http://www.mcamafia.de/nixie/ncp_en/nix_mux.htm
Nixie-Röhren sind zwar schon etwas älter aber in der Animation ist sehr gut der Multiplex-Ablauf zu sehen.
:hello: :hello: :hello: :hello: :hello:

Gruß
Dino
 
Suppi, ich bin grad am entwerfen von einer LED-Anzeige auf einer Streifenrasterplatine. (Kaufen kann ja jeder, außerdem muss ich den Umgang mit so Platinen eh noch üben)

Besser gleiche Kathode oder Anode?
 
Muss die Kathode oder Anode zusammen?
Hier hätte ich mal ein Vorschlag. Problem (!), man erkennt den Unterschied zwischen 0 und 8 nicht. Hat jemand andere Ideen?

 
Besser gleiche Kathode oder Anode?
Ein Arbeitskollege von mir würde da sagen "Feel free!" :D
Je nachdem, was du für Treiberbausteine verwendest.
Der Atmel ist da mit den Milliampere etwas begrenzt.
Kannst dir ja im Datenblatt zu deinem Controller die maximalen
Ströme der einzelnen Pins und des gesamten Bausteins mal
ansehen. Nach Masse verträgt er etwas mehr als nach +5V .
eventuell mußt du noch Transistoren als Treiber verwenden oder
ein IC wie den ULN2803 oder ähnliches.

Gruß
Dino
 
Bild:




EDIT:
Oder meinst du ich hab den falschen Controller ausgesucht. Was brauch noch? Ein anderes Quarz bestimmt oder? Hab ich sonst was vergessen? Wenn ich nochmal bei Reichelt bestellen muss, kauf ich mir eine Anzeige mit. -.-


Mein Stiefvater schlägt mir aus dem Kopf diese vor. Der ist Projektleiter bei Osmo Anlagenbau und plant Blockheizkraftwerke usw.
BC108, BC 208, BC 238. Es gibt bei Reichelt aber nurnoch den ersten. Das waren vor 20 Jahren die Standart-Transistoren.


Was bringt mir denn soein ULN2803?
Der sperrt bzw. gibt den Strom ab einer bestimmten Spannung nur frei. Also wie ein Relais.
 
Oder meinst du ich hab den falschen Controller ausgesucht. Was brauch noch? Ein anderes Quarz bestimmt oder? Hab ich sonst was vergessen? Wenn ich nochmal bei Reichelt bestellen muss, kauf ich mir eine Anzeige mit. -.-
Das mit den Anzeigen kaufen ist wohl besser als mit ein paar 5mm-LEDs eine
zu stricken. Lohnt sich aber für 2 Anzeigen nicht unbedingt. Sieh dir mal die
SA39-11 , SA52-11 , SA08-11 , SA23-12 , SA56-11 oder SA40-19RT auf
Seite 425 an (Katalog 01/2009). Die sollten für deine Aufgabe passen. Such
dir eine aus die dir gefällt. Die sind alle mit gemeinsamer Anode.
Mit LEDs würde ich in deiner Anzahl quadratische mit 5x2mm
verwenden oder mindestens 3 runde 5mm-LEDs pro Segment (das wären
dann 42 LEDs ! ). Dein Controller sieht nach nem Mega8515 oder Mega8535
oder Mega32 aus. Der ist für den Anfang schon absolut ausreichend. Dein
bischen Multiplex und PWM bekommst du sogar noch mit 1MHz internem Takt
hin. Aber was ist das eigentlich für ein Board wo der draufsteckt ?
Das wär für eine bessere Unterstützung nicht uninteressant :) Damit man
ungefähr weiß was du da anstellst :D Bei Reichelt hab ich das nicht gesehen.

Mein Stiefvater schlägt mir aus dem Kopf diese vor. Der ist Projektleiter bei Osmo Anlagenbau und plant Blockheizkraftwerke usw.
BC108, BC 208, BC 238. Es gibt bei Reichelt aber nurnoch den ersten. Das waren vor 20 Jahren die Standart-Transistoren.
Die Transistortypen kenn ich auch noch :D
Vergleichstype BC547 (npn) Denn müßte man noch kriegen.
Nimm aber besser den BC557 (pnp) wegen dem ULN2803 und den unten
erklärten Sachen mit der gemeinsamen Anode.
Du brauchst auch noch ein paar Widerstände für die Basis der Transistoren.
Pi-mal-Daumen so um die 4,7kOhm (2,2k bis 5,6k). Sollte passen.
Was die Bastelkiste so hergibt.

Was bringt mir denn soein ULN2803?
Der sperrt bzw. gibt den Strom ab einer bestimmten Spannung nur frei. Also wie ein Relais.
?? Häh ?? Sieh dir mal bei Reichelt das Datenblatt an ;)
Das ist ein 8-fach Darlington-Treiber bis 500mA mit Open-Collector-Ausgang
und direkter TTL-Ansteuerung (also 5V Eingang). Der erspart dir 8 einzeln
aufgebaute Transistorstufen für deine Segmente wenn du mit Anzeigen
mit gemeinsamer Anode arbeitest. Spart ne Menge Lötarbeit :D
Leg in die Leitungen vom Treiberbaustein zu den Segmenten noch ein paar
Widerstände für die Leuchtdioden. So um die 330 Ohm pro Segment-Leitung
sollte reichen. Direkt an den Ausgängen des Treiberbausteins für jede
Segmentleitung einen Widerstand (nicht für die einzelnen Anzeigen).
Das behütet dich davor die Anzeigen zu grillen, wenn dein Programm mal
verrückt spielt :D Ist für den Anfang etwas sicherer.

Na denn
Gruß
Dino
 
Okay. Danke schonmal. Das Board ist ist von Hendrik Hoelscher.
www.hoelscher-hi.de
http://www.hoelscher-hi.de/hendrik/light/dmxstep.htm
Das ding net sich DMX-Tranceiver.
Das ist ein AtMEGA 8515-16D. (Bezeichnung von Reichelt)

Dann muss ich nochmal bei Reichelt bestellen.

Was bräuchte ich denn noch so, um ohne sofort was zu bestellen, "über die Runden zu kommen".
Noch einen anderen Cotroller? Für 12 PWM-Kanäle sollte ich vllt. ein anderen Controller nehmen oder?
 
Ich hab mir den Schaltplan mal angesehen. Ist für Experimente ziemlich
verbaut. :( Aber für erste Anfänge absolut ausreichend. Ich würde an deiner
Stelle erst einmal an den Spare deine Taster für heller/dunkler oder so
anschließen (z.B.). 3 Stück sind so ohne weiteres möglich.
An den Stecker mit dem Port PA0-7 würde ich dann mehrere LEDs mit
Vorwiderstand nach +5V anschließen (für die Simulation von deinem PWM).
Du mußt dir dann für den Anfang nur vorstellen das die rot, grün oder blau sind :D
Vergiss die 7-Segment-Anzeige erst mal so lange, bis die PWM funktioniert.
Deine Anzeige kannst du immer noch dazubasteln. LEDs die dir in deiner
Vitrine genug Helligkeit ergeben kannst du sowieso nicht direkt mit dem
Controller steuern. Da kommst du nicht um Power-FETs drum rum. Da kann ich
dir aber helfen (hab ich mich selber mal mit beschäftigt) ;)

Also erst mal die PWM als Grundstein zum laufen bekommen.

Was hast du denn sonst so rumfliegen ? Bastelkiste mit ausgeschlachteten
Geräten ? Ich recycle bei mir gerne alle möglichen Sachen die mir so in die
Finger kommen. Elkos, Transistoren (nur bekannte Typen), LEDs, Taster,
Kühlkörper, Dioden (auch nur bekannte Typen), ICs (nur bekanntes), ...
Widerstände lohnen sich nicht unbedingt. Hochlastwiderstände (ab 1W)
geht wieder aber bei denn kleinen lohnt sich bei dem Preis der 100er Packs
der Aufwand nicht (Außer die Anschlüsse sind lang genug). Leg dir mal einen
kleinen Grundstock an "Schlachtware" an. Aber nicht so viel daß überall
nur noch Gerümpel rumfliegt. Das richtige Maß muß man da finden.

Was ich nicht mehr missen möchte ist mein Steckbrett (gibts ab ein paar
Euro bei Reichelt). Ich hab mir da ne eigene Kiste mit dem Steckbrett und
einem kleinen Sortiment an Transistoren, oft benutzten Widerständen und
Kondensatoren und Dioden angelegt. Da kann man auch gut Reste von
Klingeldraht zum verdrahten recyclen (so 0,4-0,6mm Drahtdurchmesser).
Als Versorgung nehme ich ein kleines Steckernetzteil (SNT-1000 bei Reichelt).
Das kann man für digitales auch auf 5V einstellen und 1A reicht meißt aus.

Ich kann dir da ja mal nen Anfanggssortiment zusammenstellen :)
Das geht jetzt aber glaube ich etwas Off-Topic ( sorry Dirk :rolleyes: ).
Werde ich wohl mal nen Thema zum Bastelanfang erstellen müssen :D

Na denn
Gruß
Dino
 
Jup, dass wäre nett von dir. =) Habe mir ein Steckbrett schon am Samstag bestell. Und noch eine Sachen.

Zu den PORTA mit den LEDs. ;-)
Dafür habe ich mir schon was gebastelt.
Sonst hätte ich das mit den LEDs blinken lassen ja nicht testen können.
Startsortiment, Jain.
Also ein bisschen habe ich was, aber auch nicht all zu viel. Neu kaufen wäre das beste, denke ich.

Code:
Artikelnummer    Bezeichnung                          Anzahl                    
________________________________________________________________________________
GS 40            IC-Sockel, 40-polig, doppelter Federk     6           0,68 Euro
BL 1X10G 2,54    10pol. Buchsenleiste, gerade, RM 2,54     3           2,11 Euro
SL 1X36G 2,54    36pol. Stiftleiste, gerade, RM 2,54       3           0,52 Euro
H25SR500         Streifenrasterplatine, Hartpapier, 50     2           8,50 Euro
UP 730EP         Streifenrasterplatine, Epoxyd, 1-Seit     1           3,65 Euro
DP 10            Piano-Dip-Schalter, 10-polig              1           0,88 Euro
ATMEGA 8515-16 D ATMega AVR-RISC-Controller, DIL-40        4           9,40 Euro
8,0000-HC18      Standardquarz, Grundton,   8,0 MHz        2           0,47 Euro
KERKO 27P        Keramik-Kondensator 27P                  10           0,41 Euro
STECKBOARD 2K4V  Experimentier-Steckboard 1280/400 Kon     1           8,85 Euro



Das ist mein Adapter für den ISP-Eingang und AVRISP mkII. XD:hello:

Meine LED-Test-Platine. Die oberen Port 0,2,4,6 sind Blau. Die anderen (1,3,5,7) Weiß.:trytofly:
 
Elektronikteil in den Bereich Elektronik-Schaltungen abgespalten

Hi Kani,

damit Dirk nicht wieder mit mir motzen muß :hahaha:
weil wir in diesem Teil stark :offtopic: gehen, hab ich
mal den Teil mit der Elektronik in einen anderen
Bereich verlegt :vroam:

Dann kann hier weiter über C diskutiert werden (Die Programmprobleme)
und im Bereich >Elektronik>Schaltungen >> Der neue Beitrag
dann über den Hardwareteil.

Gruß
Dino
 
Soderle, dann will ich mal meinen ersten sinnvollen Code starten.



Also,
2 Incrementalgeber sollen an PC4 und der anderen an PC5 als Eingang.
Wenn die Flanken hochgehen, sollen 10ms lang PA1 bzw. PA2 auf Ausgang stellen.

Vielleicht so besser:

Wenn PC4 den Zustand von "Low" auf "High" wechselt und PC5 vorhanden ("High") ist, soll PA1 10ms "High" schalten.

Wenn PC4 den Zustand von "Low" auf "High" wechselt und PC5 nicht vorhanden ist ("Low") ist, soll PA2 10ms "High" schalten.

EDIT:
Hier mal mein Code. Ob es so funktioniert weiß ich nicht, es kommen keine Errors oder Warnungen beim compilieren.

Code:
/* Drehrichtungsauswerter
Version: 1.0
Datum: 13.01.2009
Autor: Finn Schürmann
Target: AtMega 8515
Lizenz: Keine
*/

#include <avr/io.h>
#include <stdint.h>

DDRC  = 0x00; /* alle Pins von Port D als Eingang */
PORTC = 0xff; /* interne Pull-Ups an allen Port-Pins aktivieren */


int main(void)
{

	/* Fuehre Aktion aus, wenn Bit Nr. 4 in PINC gesetzt (1) ist */
	if ( PINC & (1<<PINC4) ) 
	{
  		PORTA |= (1 << PA1);
  	}
 
	/* Fuehre Aktion aus, wenn Bit Nr. 4 in PINC geloescht (0) ist */
	if ( !(PINC & (1<<PINC4)) ) 
	{
  		PORTA &= ~(1 << PA1);
	}
	
	if ( PINC & (1<<PINC5) )
	{
		PORTA |= (1<<PA2);
	}

	if ( !(PINC & (1<<PINC5)) )
	{
		PORTA &= ~(1<< PA2);
	}
}

Mein Problem. Wie ist das mit den Flanken? Das bekomm ich nicht hin. Der Port soll ja nur auf Ausgang gestellt werden, wenn die Flanke ansteigt und 10ms danach wieder aus.
 
Hi Kani,

Mein Problem. Wie ist das mit den Flanken? Das bekomm ich nicht hin. Der Port soll ja nur auf Ausgang gestellt werden, wenn die Flanke ansteigt und 10ms danach wieder aus.
Ein Flanke ist die Änderung eines Eingangssignals (soweit ist dir das bestimmt klar) :)
Um eine Änderung zu erkennen muß man wissen wie es vorher aussah.
Um einen alten Wert zu haben muß man zwischenspeichern :D

Du fragst also den Eingangspin ab und schaust nach wie er bei der letzten Abfrage
ausgesehen hat. Dann speicherst du den aktuellen Status des Eingangspins für
den Vergleich bei der nächsten Abfrage.

Wenn die Werte so aussehen : alt = 0 , jetzt = 1
hast du eine positive Flanke.
Und wenn sie so aussehen : alt = 1 , jetzt = 0
dann ist es eine negative :D
Bei den beiden anderen Fällen : alt = 1 und jetzt =1 - - - oder - - - alt = 0 und jetzt =0
hast du ein stabiles Eingangssignal o oder 1

Also abfragen und mit dem alten Wert vergleichen und dann den jetzigen Wert
für die nächste Abfragen wieder in "alt" speichern.

Eigentlich ganz einfach :D

Für nen Winkelencoder kannst du dir ja mal das hier ansehen :D
ATmega32-Board für Steueraufgaben und Experimente
Da ist das mit dem Winkelencoder (ohne Interrupts) im Quelltext beschrieben.
Oder sieh dir das mal an ...
http://www.jfblan.de/dino/encoder1.gif
http://www.jfblan.de/dino/encoder2.gif
http://www.jfblan.de/dino/encoder3.gif
Das sind meine Anfänge mit Winkelencoder :)
Das größte Problem bei einem Winkelencoder ist das Kontaktprellen. Wenn man das
nicht in den Griff bekommt, dann hat man bei der Auswertung nur Grütze :(

Gruß
Dino
 
Hi,
Aber was ich vor habe ist soweit klar oder?
Ist eigentlich klar. Du willst nen Winkelencoder/Drehencoder/... oder
wie man die Teile auch immer nennen will ... anschließen. Dazu mußt du die
Ausgänge A und B des Encoders an 2 Portpins packen. Wenn man nun die
positive Flanke z.B. von Signal A erkennt kann man anhand des Pegels von
B die Drehrichtung erkennen. So weit so gut :D Das ist die supereinfach
Erklärbär-Version deines Vorhabens. Oder irre ich mich jetzt doch ?

Leider muß man dabei aber auch das Kontaktprellen und kurze Drehbewegungen
(man dreht nie gleichmäßig) mit verarbeiten. Darum hab ich mir meine Version
mit den ganzen Diagrammen zusammengestrickt.

Als kleiner Info-Anhang ...
=== Kontaktprellen beseitigen ===
Zum Entprellen von Kontakten schiebe ich den Status des Portpins in ein Byte ein.
Also in etwa so ...

Bit7 <- Bit6 <- Bit5 <- Bit4 <- Bit3 <- Bit2 <- Bit1 <- Bit0 <- Status Eingangspin

Wenn der Eingangspin auf High liegt, dann füllt sich das Byte also von rechts mit
Einsen. Wenn der Pin auf Low liegt mit Nullen. Kontaktprellen erkennst du über
einzeln eingestreute Nullen oder Einsen. Erst wenn das Byte vollständig mit
Nullen oder Einsen gefüllt ist, prellt das Kontakt nicht mehr.
0x00 im Byte ist also Eingang auf Low und Prellen zu Ende
0xFF im Byte ist dann Eingang auf High und Prellen zu Ende.
Damit könntest Du deine Eingänge entprellen.

Wenn man keine 8 Zyklen lang entprellen will dann maskiert man einfach
für 4 Zyklen z.B. mit 0x0F und testet das Ergebnis dann auf 0x00 und 0x0F
(wenn man nicht so lange warten möchte ;) )
==============================

Wenn also der Byte-Inhalt von 0x00 auf 0xFF gewechselt hat, dann ist das
Kontaktprellen zu Ende und du hast eine Positive Flanke erkannt.

Ist in meinem Sourcecode als Doku drin
(Als Source aber leider nur in Assembler :( )
So etwas nennt man Bit-Gepopel :D

Gruß
Dino
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)