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
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.
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
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.