- LiFePO4 Speicher Test         
Ergebnis 1 bis 4 von 4

Thema: zwei Wege für Ausgabe über Port-Pin

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    10.04.2007
    Beiträge
    10

    zwei Wege für Ausgabe über Port-Pin

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo,

    ich beschäftige mich seit ein paar Tagen mit dem AVR µC und konnte bisher schon einiges im RN-Wiki lernen. Danke allen, die dort bisher ihr Wissen beigetragen haben.

    Was ich versuche ist, Text über ein Videobild zu überlagern, also ein OSD.
    Ziel ist, Bitmaps als Spannungsimpulse über SPI (schreiben über SPDR) zu senden. Ein zwei andere Projekte im Web machen das so.

    Da das bisher nicht funktioniert, dachte ich daran, einfach einen Port-Ausgang für kurze Zeit auf aktiv zu schalten und damit eine Linie zu erzeugen. Das funktioniert mit folgendem Code (Port-Pin über Widerstand an Videosignal):

    Code:
    Init:
    DDRB = 0x00;
    PORTB = 0xFF; 
    
    im Interrupt:
    DDRB |= (1<<DDB3);
    Wait();
    DDRB &= ~(1<<DDB3);
    Der erwähnte Interrupt kommt von einem LM1881 und stellt den HSync des Videosignals dar.

    Was ich nicht verstehe ist, weshalb folgender Code nicht zum gleichen Ergebnis führt:
    Code:
    Init:
    DDRB = (1<<DDB3);
    PORTB = ~(1<<PB3);
    
    im Interrupt:
    PORTB |= (1<<PB3);
    Wait();
    PORTB &= ~(1<<PB3);
    Der Zustand des Pins zum Zielzeitpunkt ist doch der gleiche: Output und High. Eine LED bekomme ich auf beiden Wegen zum Blinken. Worin besteht also der Unterschied?

    Grüße,
    Johannes

  2. #2
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.220
    Im ersten Beispiel ist Port B Eingang und du schaltest nur den PullUp.
    Was im zweiten Beispiel bei: PORTB = ~(1<<PB3); passiert ist mir nicht klar, warscheinlich nichts.
    Das ganze im AVR-Studio simulieren und du weisst genau bescheid.

    Hubert

    Selbst schnell kontrolliert
    Erstes Beispiel richtig beschrieben
    Zweites, PB3 ist Ausgang, bei allen anderen Pin wird der PullUp aktiviert

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    10.04.2007
    Beiträge
    10
    Zitat Zitat von Hubert.G
    Im ersten Beispiel ist Port B Eingang und du schaltest nur den PullUp.
    Was im zweiten Beispiel bei: PORTB = ~(1<<PB3); passiert ist mir nicht klar, warscheinlich nichts.
    Aber im Interrupt erfolgt ja jeweils eine Schaltung. Im ganzen: Im ersten Fall wird es doch als Eingang mit PullUp initialisiert und im Interrupt kurz auf High-Ausgang geschaltet.
    Im zweiten Fall wird als Low-Ausgang initialisiert und kurz auf High-Ausgang geschaltet.

    Aber das Ergebnis scheint verschieden zu sein.

    Das ganze im AVR-Studio simulieren und du weisst genau bescheid.
    Das kriege ich nicht hin, AVR-Studio stürzt immer sofort ab wenn ich den Debugger starte.

    Johannes

  4. #4
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.220
    Du hast recht, ich habe nur die Initialisierung beachtet.
    Du schaltest in ersten Fall in der ISR nur das DDRB und nicht das Port, also : Eingang - PullUp - ISR - Ausgang - Eingang . Der PullUp ist anschließend wieder aktiv.
    Hubert

Berechtigungen

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

12V Akku bauen