-
        
+ Antworten
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 12

Thema: ATMega8 <<-- Eingänge/Ausgänge

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    10.08.2004
    Beiträge
    122

    ATMega8 <<-- Eingänge/Ausgänge

    Hi, endlich habe ich nach Tagen mein Board einigermaßen sauber aufbauen und den Controller zum laufen bringen können. Jetzt wurschtel ich mich gerade so durch meine ersten Experimente
    Hier habe ich auch schon die erste Frage:

    -Ist es normal, das die angeschlossenen LEDs am Ausgang(von mir festgelegt) leuchten, wenn ich den jeweiligen Ausgang auf logischg null setze?

    Außerdem:

    -Wie schalte ich nen Eingang? Also im Simulator setze ich ein Bit(per Mausklick) und kann dann darauf mit dem Programm reagieren, dies habe ich in der Praxis noch nicht hinbekommen. Wie müsste das schaltplantechnisch aussehen, wenn ich beispielsweise nen Taster anschließen möchte. Ist das am Eingang dann auch alles verdreht? Also wenn ich Spannung drauf gebe ist er auf logisch null und wenn nicht auf 1??

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    01.03.2004
    Ort
    Bielefeld (JA, das gibt es!)
    Alter
    28
    Beiträge
    1.614
    Hi

    Du musst erstmal den Port initialisieren!

    Beispiel 1:

    $regfile=""
    $crystal=

    config portx=output

    portx=1

    end

    Beispiel 2:

    $regfile=""
    $crystal=

    config portx=input
    portx=63 bzw 255 (63 = Portc, 255 = Portb, Portd)

    if portx=1 then ...

    end

    Im zweiten Beispiel muss man die internen Pullup-Wiederstände des Atmega erst ausschalten, dies macht man wenn man den Port als Input definiert hat mit Portx=Zahl.
    Ausschalten=0
    Einschalten=siehe oben

    +5V -> Taster -> 250 R -> ATMEGA8

    Martin
    Ich will Microsoft wirklich nicht zerstören. Das wird nur ein gänzlich unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds, Entwickler von Linux

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    10.08.2004
    Beiträge
    122
    hmm ja das ist ok danke, aber das war jetzt in Basic oder so was??
    Das sagt mir leider nicht sehr viel, C/C++ oder Assembler würde mir mehr sagen.

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    10.08.2004
    Beiträge
    122
    Nagut nein, das braucht ihr jetzt nicht übersetzen oder so.
    Ich es mittlerweile größten Teils verstanden was ich oben gefragt habe, nur eine Sache, und zwar das mit dem verdrehten Port also wenn ich logisch eins setze dann ist es aus, müsste ich noch wissen.

  5. #5
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    01.03.2004
    Ort
    Bielefeld (JA, das gibt es!)
    Alter
    28
    Beiträge
    1.614
    In Asm und in C/C++ isses das gleiche.

    Für Asm: DDRB (Portb), DDRC (Portc) oder DDRD (Portd)

    Und dann: DDRx = ...

    Und ich weiß nicht, wie man in C/C++ was ausgibt aufm Port aber ich denke da kannste die Methode ausm Asm nehmen.

    Martin
    Ich will Microsoft wirklich nicht zerstören. Das wird nur ein gänzlich unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds, Entwickler von Linux

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    10.08.2004
    Beiträge
    122
    Was meinst du ... mal so ganz dumm gefragt??
    Was ist das gleiche? Und wie ist das mit den verdrehten Bits ? Ist das richtig so? Wie kann man es ändern?

  7. #7
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.06.2004
    Ort
    nahe Heidelberg
    Alter
    38
    Beiträge
    233
    @seitenmaster:

    Zu deiner "Portdreher - Frage": Es kommt nur auf deine Art an, wie du die LED's angeschlossen hast. Kleines Beispiel:

    Wenn du eine LED mit einem Vorwiderstand zwischen deinen Port und 5V bzw. deinen Port und Masse anschliest( Angehängtes Bild oben/unten). So wird die Erste Variante bei LOW am Portausgang und die zweite bei High am Portausgang leuchten. Hoffe jetzt ist es dir etwas klarer geworden.

    MfG Volker
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken led_142.gif  

  8. #8
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    10.08.2004
    Beiträge
    122
    Achso, ja klar danke!!
    Sorry wegen meiner dummen Fragerei, aber ich muss ja erstmal die Grundlagen verstehen, bevor ich mir mehr ausdenken kann

    Wie aktiviere ich die Pull-Up-Widerstände eines Ports bzw. einzelner Bits?

  9. #9
    Gast
    DDRX = 0x00; //gesamter Port als Eingang
    DDRX = ~_BV(PX1) & ~_BV(PX2); //nur PX1 und PX2 zwei als Eingänge
    DDRX &= ~_BV(PX5); //nur PX5 als Eingang

    analog das Aktivieren der Pull-Ups:
    PINX = 0x00;
    PINX = ~_BV(PX1) & ~_BV(PX2);
    usw.

    Ich empfehle dir das durcharbeiten der Links auf dieser Seite, sie verweisen auf einige nützliche Tutorials.

    Gruß, Alex

  10. #10
    Gast
    Sorry, bei den Pull-Ups muß es so aussehen:
    PINX = 0xFF;
    PINX = _BV(PX1) | _BV(PX2);
    PINX |= _BV(PX5);

    Die oben angeführte Variante würde sie deaktivieren.

    Gruß, Alex

+ Antworten
Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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