Forum: Mikrocontroller und Digitale Elektronik I2C-AVR300 verstehen


von Werner F. (frewer)


Lesenswert?

Hallo,

habe Verständnisprobleme bei der Anwendung der ATMEL AVR300 
Assemblerroutine für die Ansteuerung eines Port-Expanders.
Im AVR300 Dokument wird grundsätzlich nur mit DDRD.Bit geschaltet
Bsp:
" TWI_rep_start:
  sbi  DDRx,SCLP    ; force SCL low
  cbi  DDRx,SDAP    ; release SDA
  rcall  TWI_hp_delay    ; half period delay
  cbi  DDRx,SCLP    ; release SCL
  rcall  TWI_qp_delay    ; quarter period delay "

Das gilt sowohl für die SCL Leitung als auch die Datenleitung SDA.
Bisher war ich davon ausgegangen, dass der Portpin nur mit sbi/cbi 
Portx,SCL, während DDRx=H (Ausgang) ist, geschaltet wird.

Kann mir da jemand zum Verständnis verhelfen???

mfG
frewer

von Heiko B. (heiko_b)


Lesenswert?

Alle Teilnehmer am i2c schalten nur um zwischen low und einem Tri-State 
(für den log. 1 Zustand). Der High Pegel wird dabei durch die (externen) 
Pullups erzeugt. Daher steht das Datenregister ständig auf 0 und der 
gewünschte Zustand wird über das DDRx erzeugt.

von Werner F. (frewer)


Lesenswert?

Danke Heiko für die einfache Erklärung. Bin da selbst einfach nicht 
draufgekommen, weil ich stets davon ausging, dass DDRx nur für die 
Umschaltung Eingang/Ausgang eingesetzt werden kann. Aber es ist jetzt 
klar, dass bei Portx=L mittels DDRx zwischen Tristate und 0 geschaltet 
wird.

merci
frewer

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.