-         

Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 27

Thema: Erneuter Mikrokontrollereinstieg

  1. #1
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    15.04.2008
    Beiträge
    330

    Erneuter Mikrokontrollereinstieg

    Anzeige

    Hallo,

    Habe schon mal vor 1-2 Jahren versucht, einen ATMega 8 zu programmieren (war beim Programmer dabei)
    Den scheine ich aber irgendwie geschrottet zu haben, und der hatte auch zu viele Ausgänge, als dass ich sie als Anfänger verstehen hätte können...


    Nun habe ich mit ATtiny 13 besorgt, und möchte es diesmal wirklich schaffen.

    - http://www.rn-wissen.de/index.php/Bild:Avr8.jpg - hierzu gleich meine erste Frage: wozu der Widerstand?
    Brauche ich den auch beim ATtiny? Und VCC ist in diesem Bild nicht angeschlossen, nur AVCC... Wieso das?

    Was heißt hier immer Portd und .6 da habe ich mich schon verrrückt gesucht.. Und manchmal sieht man auch Kombinationen wie Portb.0b.0111.00100 ...
    Die Spache hier im Bilde ist aber nicht C?

    Dazu noch wichtige Fragen:
    Wieso muss ich Port D als Ausgang setzen? Dann sind alle Ports von D (1,2,3,4,5,6,...) Ausgänge. Gibt es auch Möglichkeiten, nur einzelne zu schalten?


    ___

    Obwohl: Welche Sprache wurde in dem Bild verwende? Die sieht ziemlich einfach aus... Ein Bekannter hatte mir aber mal geraten, C zu lernen...

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    02.11.2005
    Alter
    42
    Beiträge
    1.141
    Hi,

    erst mal vorweg zu dieser Minimalbeschaltung:
    Das ist nur eine Demonstration, dass man mit sehr wenigen Bauteilen auskommen kann. Das ist kein idealer Aufbau!

    - Der Widerstand ist der sogenannte "Pull-Up-Widerstand" für den Reset. Den brauchst Du auch beim Tiny. Idealerweise gehört an den Reset-Pin auch noch ein 100nF Kondensator gegen Masse. (Streng genommen kannst Du den Reset-Pin auch offen lassen bzw. ihn als normalen IO benutzen - allerdings kannst Du ihn dann nicht mehr mit einem ISP programmieren)

    - Im Bild ist VCC angeschlossen und AVCC nicht. AVCC benötigt man eigentlich nur, wenn man die internen AD-Wandler benutzt. AVCC sollte dennoch immer mit an VCC (evtl über Filter, wenn der AD benutzt wird) angeschlossen werden.

    - Die Programmiersprache im Bild ist Bascom. Das C-Equivalent zu Portd.6 = 1 wäre PORTD |= (1<<6); Damit sprichst Du den Pin PD6 an.

    - Im Bild werden die LEDs ohne Vorwiderstände betrieben. Das ist schädlich für Controller und LEDs und sollte daher nicht gemacht werden.

    PS: Hast Du schon diesen Artikel gelesen: http://www.rn-wissen.de/index.php/AV...leicht_gemacht ? Da steht schon viel nütliches für den Einstieg drin...

    Gruß,
    askazo

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    20.08.2008
    Ort
    Karlsruhe
    Alter
    29
    Beiträge
    1.221
    Hallo,

    Die Sprache ist nicht C, sondern Bascom (Basic).
    Ferner hat das Bild nicht wirklich Vorbildfunktion, du solltest dir eher die Grundschaltung ansehen, die da normalerweise besteht aus: 10kOhm an RESET gegen VCC, um ungewollte Resets durch Störungen zu vermeiden, ein 100nF-Kerko (oder ähnlich "schnelle" Kondensatoren) zwischen GND und VCC. Außerdem betreibt man LED normalerweise nie, nie, niemals ohne Vorwiderstand.
    Die Datenblätter empfehlen, AVCC über eine Induktivität mit 10µH mit VCC sowie einen Kondensator mit 100nF nach GND zu verbinden. (Datenblatt, Analog Noise Canceling Techniques, Fig. 96, Seite 203 im Datenblatt des ATMega. Natürlich nur, wenn dein AVR AVCC hat

    Lies dir doch mal das Datenblatt des Tiny13 durch (auch wenn das einige hundert Seiten hat ...), dann verstehst du vieles besser.

    Zu den Anweisungen: Die Ein/Ausgänge der AVRs sind in Ports aufgeteilt. (Details: Datenblatt, Abschnitt I/O-Ports)
    Portd.6 = 1 schaltet den Pin mit Nr. 6 an Port D ein (oder den Pullup).

    mfG
    Markus

    Edit: Verdammt, zu langsam ... @askazo: Die 100nF an Reset sind m.W. sehr optional und schließen ferner das Debuggen mit DebugWire aus ...

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    02.11.2005
    Alter
    42
    Beiträge
    1.141
    @markus: ja, eigentlich hast Du Recht. Die AVRs machen auch von sich aus einen sauberen Power-On-Reset. Naja, hab's mir so angewöhnt, benutze aber auch kein Debug-Wire

    Gruß,
    askazo

  5. #5
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    15.04.2008
    Beiträge
    330
    Habe mir das alles nocheinmal durchgelesen...

    Bin auf folgendes gestoßen (Gehe ich richtig?)

    Mit DDB1 ... DDB5 setzt man einen Fuß auf Eingang/Ausgang (mit Anhang 0x01 oder sowas)

    PORTB1 ... PortB2 ... ist schon Ausgang, den kann man dann auf 1 oder 0 schalten (mit Anhnag 0X00 oder sowas)

    PINB1, PINB2... Damit nimmt man den Eingang, den man bei if-Befehlen aufrufen kann
    Anhang wiederrum nötig


    ___
    Nun, diese ganzen ANhänge verwirren mich irrsinig, und ich finde nirgends eine Logik, wie man sie zuordnet....

  6. #6
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    705
    ...fast richtig

    "DDR" sind in der Tat die "Data Directory"Register, mit denen man festlegt, ob ein Anschluss ein Ein- oder Ausgang ist.

    Beim Power-On-Reset sind sie erstmal alle auf 0, d.h. alle Anschlüsse sind als Eingänge geschaltet. Das ist auch gut so, denn ein Eingang kann erstmal keinen externen Schaden anrichten.

    Du kannst die einzelnen Bits eines Registers auf zwei Arten setzen:

    Entweder einzeln, also z.B. DDRB.6=1 (setzt das 6. Bit)

    oder alle zusammen. Wenn Du also D.0, D.1, D.2 und D.3 als Ausgang nutzen willst, schreibst Du einfach

    DDRD = &B00001111

    "&B" heißt nur, dass die nachfolgende Zahl binär dargestellt ist. Und das höchstwertigste Bit steht links.

    Weil binär 00001111 dezimal 15 entspricht, könnte man auch schreiben

    DDRD = 15

    Aber binär ist´s halt anschaulicher, weil man alle Bits direkt vor sich sieht.


    Eingänge werden in der Tat über PINX.Y abgefragt, und wenn Du einen Ausgang auf 1 oder 0 setzten möchtest, geht das über PORTX.Y.

    Das PORT-Register hat aber auch eine Aufgabe, wenn der Anschluss als Eingang konfiguriert ist. Damit wird nämlich der interne PullUZp-Widerstand aktiviert, der die Eingangspin über ca. 50 kOhm auf +5V zieht.

    Ist es jetzt etwas klarer?

  7. #7
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    15.04.2008
    Beiträge
    330
    Ist es jetzt etwas klarer?
    Ja, danke

    Entweder einzeln, also z.B. DDRB.6=1 (setzt das 6. Bit)
    Diesen Befehl gibt es in C?

    DDRB=3 (PB0+PB1) habe ich jetzt verstanden...


    Wenn man abfragt, ob ein Eingang Strom hat:

    Wenn PB0 hat Strom -> Aktion

    Wenn ich 'if PINB=1' schreibe ist das aber die falsche Bedingung, da dann ja automatisch alle anderen 0 sind (00000001), das heißt er reagiert nur dann, wenn alle augänge keinen strom haben. Das sollte ihm aber egal sein

  8. #8
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    705
    Diesen Befehl gibt es in C?
    Das weiß ich nicht - "C" kann ich gerade mal fehlerfrei buchstabieren, mehr aber nicht

    Wenn Du eine Aktion ausführen willst, wenn am Anschluss B.0 ein High-Signal anliegt, geht das so:

    If PINB.0 = 1 then
    Befehl 1
    Befehl 2
    ...
    End if

    Soll in Abhängigkeit des Eingangssignales zwischen zwei Aktionen unterschieden werden, geht das so:

    If PINB.0 = 1 then
    Befehl 1
    Befehl 2
    ...
    Else
    Befehl A
    Befehl B
    ...
    End if

    Wenn die Aktion nur aus einem einzigen Befehl besteht, geht´s auch in einer Zeile und ohne End If:

    If PINB.0 = 1 then Befehl 1

    Bzw. als entweder-oder-Geschichte:

    If PINB.0 = 1 then Befehl 1 Else Befehl A

  9. #9
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    15.04.2008
    Beiträge
    330
    Kennt sich zufällig jemand mit pem Programm myAvr aus?

    Das habe ich benutzt, um den Code zu schreiben, dann wollte ich brennen, und nun schreibt er 'USB not found' und 'giveio not found' ....

    Dann habe ich den USB-Treiber installiert, danach ging es noch immer nicht...

  10. #10
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    15.04.2008
    Beiträge
    330
    Hey es geht endlich!!! (teilweise)

    Nun ist der Chip programmiert und mit 2* 1,6 V Batterien angeschlossen...

    Allerdings kann ich die periodischen 'Stomstöße', die ich einprogrammiert habe, nur messen.

    LEDs leuchten keine, da ein Widerstand eingebaut ist.
    Ohne Widerstand würde ich den Chip schrotten - was soll ich tun? Bitte um schnelle Hilfe!!

    Kennt jemand eine Möglichkeit, das ganze (ohne Verstärkerschaltung) hinzubekommen?

Seite 1 von 3 123 LetzteLetzte

Berechtigungen

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