- fchao-Sinus-Wechselrichter AliExpress         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 16 von 16

Thema: Suche Programmbeispiel für TWI/I2C Bus in Assembler

  1. #11
    Neuer Benutzer Öfters hier
    Registriert seit
    16.01.2010
    Beiträge
    17
    Anzeige

    E-Bike
    Danke für deine schnelle Antwort.

    Hab mal probiert das ganze umzusetzen. Kann bis jetzt nur sagen, dass das Programm komplett durchläuft. Kann noch nicht sagen ob die Daten des PCF richtig eingelesen werden, weil ich unter der Woche kaum Zeit habe. Muss das am Wochenende prüfen.

    Kannst du nochmal schauen ob ich das so richtig verstanden habe und ob ich an der richtigen stelle das Datenregister (TWDR) auslese. Bin mir da ein wenig unsicher.

    Danke

    __________________________________________________ ___________

    in r16, TWSR
    andi r16, 0xF8
    cpi r16, 0x40
    brne error

    ldi r16, (1<<TWINT) | (1<<TWEN) | (0<<TWEA)
    out TWCR, r16

    in r20, TWDR

    rcall wait

    in r16, TWSR
    andi r16, 0xF8
    cpi r16, 0x58
    brne error

    ldi r16, (1<<TWINT) | (1<<TWEN) | (1<<TWSTO)
    out TWCR, r16
    ret

    wait:
    in r16, TWCR
    sbrs r16, TWINT
    rjmp wait
    ret
    __________________________________________________ ___________

  2. #12
    Neuer Benutzer Öfters hier
    Registriert seit
    16.01.2010
    Beiträge
    17
    Hab noch was vergessen. Wollte das ganze nutzen wenn der Interrupt des PCF ausgelöst wird. bzw wenn sich was ein den Eingängen tut, weil ich da vorerst ein paar Schalter anschließen wollte.

    INT (PCF) hab ich an INT2 (Mega) angeschlossen.

    Sollte doch funktionieren, wenn ich das als ganz normale ISR ablaufen lasse, oder ?

    mit
    .org 0x006
    rjmp input_isr

  3. #13
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    10.02.2005
    Ort
    eastside, L.E.
    Alter
    53
    Beiträge
    104
    Das wäre noch zu früh, erst wenn Du den Status 0x50 / 0x58 hast, ist ein Datenbyte im TWDR.
    INT2 mußt Du im GICR-Register noch 'freischalten', damit die ISR ausgeführt wird.
    __________________________________________________ ___________

    in r16, TWSR
    andi r16, 0xF8
    cpi r16, 0x40
    brne error

    ldi r16, (1<<TWINT) | (1<<TWEN) | (0<<TWEA)
    out TWCR, r16

    rcall wait

    in r16, TWSR
    andi r16, 0xF8
    cpi r16, 0x58
    brne error

    in r20, TWDR

    ldi r16, (1<<TWINT) | (1<<TWEN) | (1<<TWSTO)
    out TWCR, r16
    ret

    wait:
    in r16, TWCR
    sbrs r16, TWINT
    rjmp wait
    ret
    __________________________________________________ ___________

  4. #14
    Neuer Benutzer Öfters hier
    Registriert seit
    16.01.2010
    Beiträge
    17
    Hey, ich hänge noch ein wenig beim Interrupt des PCFs.

    Hab das ganze so gemacht, dass meine Routine bei einer steigenden Flanke an INT2 abläuft. Funktioniert auch bestens wenn ich INT2 mit 5V verbinde.

    Mein Problem liegt jetzt beim PCF. Bei mir sind alle I/O des PCF auf 5V. Da im Datenblatt stand, dass der INT ausgelöst wird wenn an einem Port eine Flanke steigt oder fällt, hab ich mir gedacht einen Port über einen Taster auf GND zu legen. Wenn ich den Taster drücke habe ich GND am I/O Port des PCFs. Nur leider passiert nichts an INT.

    An INT sind bei mir 0V, obwohl ich eigentlich dachte, dass man da 5V hat und bei Änderung der Ports INT auf logisch 0 geht und nicht auf logisch 1.

    Was mache ich falsch?

  5. #15
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    10.02.2005
    Ort
    eastside, L.E.
    Alter
    53
    Beiträge
    104
    Irgendwie ist Deine Antwort in sich nicht schlüssig, findest Du nicht auch?

    Richtig ist, daß der INT auf logisch 0 / 0V geht, wenn sich an den Pins was ändert. Darum heißt der Pin ja auch INT mit Strich drüber.
    Dementsprechend mußt Du die fallende Flanke auswerten.

    Dann gibts da noch den Hinweis im Datenblatt, daß das ein open-drain-output ist, also brauchst Du einen Pullup auf der Leitung. Kann auch der interne im mega32 sein.

    Rajko

  6. #16
    Neuer Benutzer Öfters hier
    Registriert seit
    16.01.2010
    Beiträge
    17
    Sorry, hab mich ein bisschen unklar ausgedrückt.

    Hab das mit der hohen Flanke am Mega nur mal gemacht um zu schauen ob meine ISR funktioniert.

    Tatsache ist jedoch, dass ich keine 5V am INT Ausgang meines PCFs bekomme. Da müsste ich doch schon 5V haben sobald ich VDD und VSS angeschlossen habe. Hab ich jedoch nicht.

    Weißt du dafür ne Antwort oder ist mein PCF kaputt?

    Danke schonmal.

Seite 2 von 2 ErsteErste 12

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

LiFePO4 Speicher Test