Forum: Mikrocontroller und Digitale Elektronik Serielles einlesen mit PC_INT


von JonaGold (Gast)


Lesenswert?

Hallo,

ich versuche gerade 8 bit in Folge mithilfe des Pin-Change-Int´s bei 
jeder Flanke einzulesen und frage mich, ob meine Gedanken da richtig 
sind!
Ich lese bei jedem "clock"-Puls PB0 als "Datenbit" ein, schiebe danach 
das Datenbyte, bis 8 bit erreicht sind!
Die Hauptidee war, ein counter-Register durch einen Preset von OWD(R16) 
mit "1" und anschließendem schieben zu vermeiden.
1
_PCINT0:           SBIC PINB,0;Überspringe nächstes, wenn PB0=0
2
       ORI OWD,0b00000001     ;Bit speichern
3
        LSL OWD      ;Bit-shift
4
       BRCC PCEND
5
       ;---Zähler=8 überschritten
6
       LDI OWD,1      ;Preset-Wert
7
                   RETI
Hat jemand eine Verbesserungsidee?/ schneller?

Danke

: Bearbeitet durch User
von spess53 (Gast)


Lesenswert?

Hi

>Hat jemand eine Verbesserungsidee?

Beachtet: Jeder Taktimpuls gibt zwei PCINTs?

MfG Spess

von JonaGold (Gast)


Lesenswert?

Ja. Das war im Plan, ich wollte bei jedem Flankenwechsel (DDR) ein 
Datenbit übertragen.

Nur wie man das Stoppbit dann da reinkrigen soll ist mir noch nicht 100% 
klar

Jona

von JonaGold (Gast)


Lesenswert?

noch jmd eine idee, wie man das einlesen "beschleunigen" könnte?

Danke

von Oldie (Gast)


Lesenswert?

8 Bit serielle Daten. Wie kommen die denn an?

Schon bedacht, dass dabei auch 1..8 Bits alle den gleichen
Wert haben können? -> Nix Flanke!

Um einen Zähler/Timer wirst du schwerlich herummkommen.

von JonaGold (Gast)


Lesenswert?

Also es gibt einen Clocking-Pin (PB2 / INT0) und einen Daten-Pin (PB0). 
Bei jedem Flankenwechsel wird der Datenpin ausgelesen. Das Problem ist 
nur, daß ich noch keine "Stoppbedingung" definieren konnte!

von Karl H. (kbuchegg)


Lesenswert?

Warum uterhalten wir uns dann über 'schneller', wenn as was du jetzt 
hast noch nicht einmal richtig funktioniert. Definier doch erst mal 
vollständig, wie deine Übertragung überhaupt funktionieren soll.

von Peter D. (peda)


Lesenswert?

JonaGold schrieb:
> Das Problem ist
> nur, daß ich noch keine "Stoppbedingung" definieren konnte!

Wenn Du das nichtmal definieren kannst, kann es der MC erst recht nicht.
Du mußt Dir erstmal ein Protokoll ausdenken, welches eindeutig ist.

von Thomas E. (picalic)


Lesenswert?

JonaGold schrieb:
> Die Hauptidee war, ein counter-Register durch einen Preset von OWD(R16)
> mit "1" und anschließendem schieben zu vermeiden.

Kann man so machen - mache ich bei Software-UARTs auch immer so.

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.