loetstelle.net
Lötstelle Userforum
 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen   RegistrierenRegistrieren 
 ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Digitale Lösung für Schaltungen / Problem?
Gehe zu Seite Zurück  1, 2, 3 ... 10, 11, 12 ... 18, 19, 20  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    loetstelle.net Foren-Übersicht -> Microcontroller und DSP
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
gerold



Anmeldungsdatum: 27.07.2007
Beiträge: 927
Wohnort: Oberhofen im Inntal (Tirol)

BeitragVerfasst am: So 18.Mai 2008 20:55:07    Titel: Bauteile finden Antworten mit Zitat

Hallo!

Mit Freude und Erleichterung verkünde ich hiermit, dass der LCD-Beitrag endlich fertig ist.

Viel Spaß beim Lesen:
http://www.loetstelle.net/forum/viewtopic.php?p=8550#8550

mfg
Gerold
Smile

_________________
http://halvar.at | http://sw3.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Joschi



Anmeldungsdatum: 02.06.2008
Beiträge: 2

BeitragVerfasst am: Mo 02.Jun 2008 21:09:37    Titel: Bauteile finden Antworten mit Zitat

Hallo Gerold, habe durch Zufall diese Seite gefunden und von Anfang an mit Interesse mitgelesen. Sehr gut gemacht! Very Happy

Habe mir ein Breadbord mit dem Atmega 8 aufgebaut und mir den mySmartUSB Prommer gekauft.

Ich habe BASCOM und USB-Prommer installiert und habe folgendes Problem:

BASCOM erkennt den Prommer nicht! Ich habe erst auf USB-ISP Prommer in BASCOM eingestellt, funktioniert nicht! Welche Einstellungen muß ich in BASCOM einstellen?

Gruß Joschi
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Bauteiltöter



Anmeldungsdatum: 10.03.2008
Beiträge: 172

BeitragVerfasst am: Mo 02.Jun 2008 21:34:02    Titel: Bauteile finden Antworten mit Zitat

du musst in bascom den Compot einstellen, auf dem der MySmard eingestellt wurde

hoffe das hilft

MfG
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Joschi



Anmeldungsdatum: 02.06.2008
Beiträge: 2

BeitragVerfasst am: Mo 02.Jun 2008 21:43:36    Titel: Bauteile finden Antworten mit Zitat

Danke Bauteiltöter,

ich habe es schon gefunden, ich muss in BASCOM den Prommer unter Optionen>Prommer>AVR ISP Programmer einstellen und den richtigen Comport dazu!

Dann kann ich ja heute noch ein paar Beispiele programmieren.

Das "Hallo Welt" hat gerade funktioniert! Jetzt kann ich programmieren! Very Happy

Kleiner Scherz, bin ein blutiger Noob. Aber ich werde mich schon mit der Materie beschäftigen.

Danke und Gruß

Joschi


Zuletzt bearbeitet von Joschi am Di 03.Jun 2008 13:03:36, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
gerold



Anmeldungsdatum: 27.07.2007
Beiträge: 927
Wohnort: Oberhofen im Inntal (Tirol)

BeitragVerfasst am: Mo 02.Jun 2008 23:49:01    Titel: Bauteile finden Antworten mit Zitat

Joschi hat folgendes geschrieben:
Hallo Gerold, habe durch Zufall diese Seite gefunden und von Anfang an mit Interesse mitgelesen. Sehr gut gemacht! Very Happy

Danke schön! Very Happy

_________________
http://halvar.at | http://sw3.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
xeen



Anmeldungsdatum: 03.06.2008
Beiträge: 1

BeitragVerfasst am: Di 03.Jun 2008 19:38:28    Titel: Löten oder nicht löten? Bauteile finden Antworten mit Zitat

Hallo,

ich habe das Tutorial auch teilweise mitverfolgt,
das Funk-Evaluationsboard von Pollin bestellt und will jetzt anfangen es zu bestücken.

Meine Frage ist jetzt, ob ich alle kleinen Kontaktstellen die von der einen Seite auf die andere führen auch mit einem kleinen Kontakt löten soll oder ob das nicht notwendig ist.
Also mein kleiner gesunder Lötverstand sagt mir, das die nicht umsonst da sind. Habe auch ein paar verfolgt und vermute mal das sonst einige Kontakte nicht gehen.
Andererseits steht in der Bastelanleitung, welche dabei lag, nichts davon drin und auf den Bildern sieht es auch nicht so aus, als ob dort gelötet wurde.

Falls jemand auf diese sicherlich simple Frage eine Antwort weiß, wäre ich sehr dankbar.

Nur mal nebenbei, gibt es einen Trick wie ich die Sockel bzw. Pfostenleiste verlöte, wenn ich oben und unten Kontakte brauche?
Ich hätte jetzt gedacht, ein wenig Lötzinn auf die Stelle, warm machen, Sockel durchdrücken und dann von der anderen Seite festlöten. Nur bei Mehr als einer Stelle wird es schwierig, hab doch nur einen Lötkolben. Vielleicht kennt ihr da die richtige Herangehensweise.

Schonmal vielen Dank für die Tips,
Dank auch an Gerold für die Ausführungen,

mfG
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
gerold



Anmeldungsdatum: 27.07.2007
Beiträge: 927
Wohnort: Oberhofen im Inntal (Tirol)

BeitragVerfasst am: Di 03.Jun 2008 21:04:57    Titel: Re: Löten oder nicht löten? Bauteile finden Antworten mit Zitat

xeen hat folgendes geschrieben:
Meine Frage ist jetzt, ob ich alle kleinen Kontaktstellen die von der einen Seite auf die andere führen auch mit einem kleinen Kontakt löten soll oder ob das nicht notwendig ist.

Hallo xeen!

Diese Frage hatte ich mir auch gestellt. Aber es genügt, wenn du die Unterseite verlötest. Die wichtigen Stellen sind bereits durchkontaktiert.

mfg
Gerold
Smile

_________________
http://halvar.at | http://sw3.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
gerold



Anmeldungsdatum: 27.07.2007
Beiträge: 927
Wohnort: Oberhofen im Inntal (Tirol)

BeitragVerfasst am: Do 05.Jun 2008 16:58:59    Titel: Analog/Digital-Converter mit dem Befehl GETADC Bauteile finden Antworten mit Zitat

Hallo!

Langsam ist es an der Zeit mein Versprechen einzulösen, dass ich nach dem LCD-Thema das Thema Analog/Digital-Converter (ADC) aufgreife. Ein ADC ist so etwas wie ein Spannungsmesser. Mit einem ADC kann eine Spannung zwischen 0 Volt und der Analog-Versorgungsspannung AVCC (normalerweise 5 Volt) gemessen werden. Wenn man eine höhere Spannung messen will, dann muss man diese zuerst so weit niederbrechen, dass niemals mehr als AVCC bzw. die angelegte Referenzspannung am zu messenden Pin anliegen kann. Zum Beispiel mit einem Spannungsteiler aus zwei Widerständen und einer Z-Diode zum Schutz vor Überspannungen. Die Impedanz dieses Spannungsteilers sollte 10 kOhm nicht überschreiten.

Der ATmega8 hat so einen ADC mit an Board. Es ist zwar nur ein ADC eingebaut, aber dieser kann von sechs Pins (bei DIP-Gehäuse) oder acht Pins (bei SMD-Gehäusen) angesteuert werden. Dafür hat der ATmega8 einen so genannten Multiplexer eingebaut. Ein Multiplexer ist nichts anderes als ein Schalter, der das Signal eines Pins zum ACD umleitet.

Man muss also zuerst den Multiplexer einstellen -- also den Pin auswählen, von dem das Signal zum ADC umgeleitet werden soll. Dann kann man die Messung mit dem ADC beginnen.

Analog to Digital Converter (ATmega8 Datenblatt, Seite 197)



Bascom bietet dafür den Highlevel-Befehl GETADC an. GETADC stellt zuerst den abzufragenden Pin über den Multiplexer ein und misst danach die dort angelegte Spannung mit dem ADC. Du musst dich selber um nichts mehr kümmern.

Du solltest aber auch wissen, dass GETADC kein Wundermittel ist. Wie andere Highlevel-Befehle auch, hat GETADC auch Nachteile. Einer der Nachteile ist, dass das Programm so lange still steht (grob geschätzt, bis zu 300 µs), bis die Messung vorbei ist.
Der Befehl GETADC stellt zuerst den Multiplexer ein. -- Danach wird erst gemessen. Es könnte also passieren, dass ein Interrupt das Programm genau zwischen dem Umstellen des Multiplexers und der Messung unterbricht. Das alleine ist noch kein Problem. Es wird nur dann zu einem Problem, wenn im Interrupt-Handler der Multiplexer auf einen anderen Pin umgeschaltet wird. Falls du also den Multiplexer innerhalb eines Interrupt-Handlers umstellst (warum auch immer), solltest du vor dem Verwenden von GETADC die Interrupts global ausschalten und danach wieder einschalten (mit den Befehlen ``DISABLE INTERRUPTS`` und ``ENABLE INTERRUPTS``). Man kann den ADC auch so einstellen, dass Messungen ohne Unterbrechung des Programmes vorgenommen werden. Das ist kein Problem, aber das funktioniert nicht mit dem Highlevel-Befehl GETACD. Dafür muss man die Einstellungen direkt in den AVR-Registern setzen (ohne Highlevel-Befehl).


CONFIG ADC:
Mit CONFIG ADC wählt man in erster Linie die Referenzspannung aus. Man kann damit auch auswählen, wie schnell die Messungen durchgeführt werden sollen. Je schneller, desto ungenauer. Je langsamer, desto genauer. Aber da das mit dem Parameter ``PRESCALER = AUTO`` automatisch passiert, werde ich nicht weiter darauf eingehen.

Zur Verwendung des ADC mit dem Highlevel-Befehl GETADC, muss man den ADC auf SINGLE stellen. Da diese Einstellung bei Verwendung von GETADC immer gleich aussieht, werde ich hierauf auch nicht näher eingehen.

Anders sieht es mit der Auswahl der Referenzspannung aus. Der REFERENCE-Parameter kann beim ATmega8 auf ``AREF``, ``AVCC`` oder ``INTERNAL`` eingestellt werden.

Wird AREF als Referenzspannung ausgewählt, dann wird diese direkt vom AREF-Pin genommen. Diese Referenzspannung muss mit einem 100n Keramikkondensator gegen GND entstört werden.

Wird AVCC als Referenzspannung ausgewählt, dann wird diese *intern* an AREF angelegt. Diese Spannung kann, zusätzlich zur obligatorischen Entstörung des AVCC-Pins, mit einem 100n Keramikkondensator von AREF (nicht AVCC) nach GND entstört werden.

Wird INTERNAL als Referenzspannung ausgewählt, dann wird eine *interne* 2,56 Volt Referenzspannung an AREF angelegt. Diese Spannung muss mit einem Keramikkondensator gegen GND entstört werden.

Beispiel:
Code:
CONFIG ADC = SINGLE, PRESCALER = AUTO, REFERENCE = AVCC

Die Hilfe zu CONFIG ADC findest du hier: http://avrhelp.mcselec.com/index.html?config_adc.htm


START ADC:
Bevor man den ADC verwenden kann, muss man den ADC aktivieren. Und genau das passiert mit dem Befehl START ADC. Beispiel siehe: GETADC

Die Hilfe zu START ADC findest du hier: http://avrhelp.mcselec.com/index.html?start.htm


GETADC:
GETADC erwartet als Parameter die ID des zu messenden ADC-Pins. Der ATmega8 stellt sechs, oder bei SMD-Gehäusen bis zu acht, ADC-Eingänge zur Verfügung. Diese sind beim Atmega8 im DIP-Gehäuse die Pins PC0 bis PC5. Bei SMD-Gehäusen kommen noch die zwei Pins ADC6 und ADC7 dazu. Diese zwei Pins können nur als ADC-Eingänge verwendet werden. Ansonsten haben diese Pins keine zusätzliche Funktion.
Beispiel:
Code:
CONFIG ADC = SINGLE, PRESCALER = AUTO, REFERENCE = AVCC
START ADC
DIM messergebnis AS WORD
messergebnis = GETADC(0)
...
messergebnis = GETADC(7)

Zusätzlich zu den oben genannten Pins (0-7), kann noch eine interne 1,3 Volt Bandgap-Spannungsreferenz über die Zahl 14 und GND über die Zahl 15 gemessen werden.
Beispiel:
Code:
CONFIG ADC = SINGLE, PRESCALER = AUTO, REFERENCE = AVCC
START ADC
DIM messergebnis AS WORD
messergebnis = GETADC(14) '1,3 Volt Bandgap
messergebnis = GETADC(15) '0 Volt GND

Die Hilfe zu GETADC findest du hier: http://avrhelp.mcselec.com/index.html?getadc.htm


Messauflösung:

Die Messauflösung des ADC ist 10 Bit. Das bedeutet, dass maximal 1024 unterschiedliche Spannungen gemessen werden können. Bei einer Referenzspannung von 5 Volt ist jeder Messschritt 0,0048 Volt groß. Kleinere Spannungsunterschiede können nicht gemessen werden. Die Genauigkeit schwankt zwischen +-2 Messschritten. Bei 5 Volt Referenzspannung ist die Genauigkeit also +-0,0097 Volt. Wenn man das grob schätzt, dann kann man sagen, dass der ADC bei 5 Volt Referenzspannung eine angelegte Spannung auf zwei Kommastellen genau misst.

Ich habe bis jetzt nur von 5 Volt Referenzspannung geschrieben. Aber man kann jede beliebige Spannung zwischen 2 Volt und AVCC als Referenz verwenden. Diese Spannung kann man an den Pin AREF anlegen. Am Einfachsten ist es, wenn man die Spannung vom Pin AVCC, also der Spannungsversorgung des analogen Teils des Mikrocontrollers, als Referenzspannung verwendet. AVCC als Referenzspannung kann man intern einstellen. Man muss diese also nicht extra an den Pin AREF anlegen. Um kleinere Spannungen messen zu können, ohne eine Referenzspannung an AREF anlegen zu müssen, kann man auch eine interne 2,56 Volt Referensspannung auswählen.
Mit dem Befehl CONFIG ADC wählt man die Referenzspannung aus.

Da der Mikrocontroller nicht wissen kann, welche Spannung als Referenz anliegt, gibt der ADC immer nur eine Zahl zwischen 0 und 1024 zurück. 0 bedeutet 0 Volt und 1024 bedeutet Referenzspannung. Diese Zahl in eine Spannung umzuwandeln liegt an dir.

Die Formel dafür lautet: Vin = Vref / 1024 * ADC

Wenn du eine 5 Volt Referenzspannung verwendest, dann kannst du dir "5.0 / 1024.0" in einer Konstante speichern. So ersparst du dir diesen Rechenschritt im Programm. Z.B. so:
Code:
CONST ADC_MULTI = 0.0048828125 ' = 5.0 / 1024.0


Beispiel:
Code:
CONST ADC_MULTI = 0.0048828125 ' = 5.0 / 1024.0
CONFIG ADC = SINGLE, PRESCALER = AUTO, REFERENCE = AVCC
START ADC
DIM messergebnis AS WORD
DIM volt AS SINGLE
messergebnis = GETADC(0)
volt = messergebnis * ADC_MULTI


Entstörung und Anschlussplan:

Für analoge Messungen muss der Pin AVCC gut entstört werden. Das geschieht zuerst mal mit einem 100 n Keramikkondensator gegen GND. Und zusätzlich sollte man den Strom über eine 10 µH Spule von VCC beziehen.

Ob nun die interne 2,56 Volt Spannungsreferenz, VCC oder direkt AREF als Spannungsreferenz herangezogen wird, ein 100 n Keramikkondensator vom Pin AREF nach GND kann nicht schaden.



Weiters sollte man darauf achten, dass während einer Messung kein Pin des Analogteiles umgeschaltet wird. Jede Zustandsänderung an einem der Analog-Pins kann das Ergebnis verfälschen. Das ist auch der Grund dafür, dass ich die Analog-Pins nur dann für digitale Operationen verwende, wenn ansonsten keine anderen Pins mehr zur Verfügung stehen.

Die Pins PC4 (ADC4/SDA) und PC5 (ADC5/SCL) sind Sonderfälle. Da diese Pins auch für I²C-Verbindungen zuständig sind, werden diese Pins nicht von AVCC sondern von VCC versorgt. Diese beiden Pins werden also mit der Stromversorgung für den digitalen Bereich des Mikrocontrollers versorgt. Und nicht wie die restlichen ADC-Pins mit AVCC. Dadurch sind Messungen an diesen Pins nie so genau, wie an den anderen ADC-Pins. Das sollte man beim Zeichnen eines Schaltplanes beachten.

lg
Gerold
Smile

_________________
http://halvar.at | http://sw3.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.


Zuletzt bearbeitet von gerold am Fr 11.Jul 2008 14:54:43, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
BellaD



Anmeldungsdatum: 03.12.2006
Beiträge: 1708
Wohnort: Klinik der misshandelten Kuscheltiere

BeitragVerfasst am: Do 05.Jun 2008 18:29:59    Titel: Bauteile finden Antworten mit Zitat

Moin

falls man sich wundert das was anderes beim Rechnen rauskommt als erwartet Rolling Eyes nicht wundern - die interne Referenzspannung schwankt von Controller zu Controller - mein letzter ATmega8 hat zB. anstatt 2,56Volt freundlich 2,72Volt interne Referenz ... am besten mal am Aref.Pin nachmessen bevor man sich Kopfschmerzen macht Wink

_________________
Eine Weiterverbreitung ohne ausdrückliche Genehmigung ist untersagt. Für Schäden, lehnen wir jegliche Haftung ab.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
gerold



Anmeldungsdatum: 27.07.2007
Beiträge: 927
Wohnort: Oberhofen im Inntal (Tirol)

BeitragVerfasst am: Mo 09.Jun 2008 20:20:36    Titel: Analog-Comparator Bauteile finden Antworten mit Zitat

Hallo!

Im letzten Beitrag habe ich den Analog/Digital-Converter angesprochen. Das heutige Thema hat zwar auch mit dem Stichwort "Analog" zu tun, aber nicht mit der Messung einer Spannung, sondern mit dem Vergleich zweier Spannungen. Der Analog-Comparator (AC) vergleicht zwei Spannungen miteinander. Ist die Spannung am Pin AIN0 (PD6) höher als die Spannung am Pin AIN1 (PD7), dann gibt der Analog-Comparator HIGH zurück. Ist die Spannung am Pin AIN0 kleiner als die Spannung am Pin AIN1, dann gibt der Analog-Comparator LOW zurück.

Das kann man nutzten, um z.B. Pegelstände über ein Potentiometer einzustellen, welche bei Über- oder Unterschreiten angezeigt werden sollen. Oder um einen Pegel immer unter einem anderen Pegel zu halten. Z.B. zur Ansteuerung einer Wasserpumpe, die nur dann Wasser in einen Auffangbehälter pumpt, wenn noch genug Platz im Auffangbehälter ist.

An welchem Pin (AIN0 oder AIN1) die Referenzspannung angelegt wird ist egal. Die Spannung darf aber, wie üblich, nicht höher als VCC sein. Statt einer externen Referenzspannung kann eine interne 1,30 Volt (min: 1,15 V; max: 1,40 V) Bandgap-Referenzspannung verwendet werden. Diese interne Referenzspannung wird intern an AIN0 angelegt. Der Pin PD6 bleibt dadurch für andere Anwendungen frei.

Analog Comparator Block Diagram (ATmega8 Datenblatt; Kapitel "Analog Comparator")




STOP AC
START AC
Der AC ist ständig eingeschaltet (aktiv) und muss nicht explizit gestartet werden. Man kann ihn mit ``STOP AC`` ausschalten und mit ``START AC`` wieder einschalten.

Die Hilfe zu START AC findest du hier: http://avrhelp.mcselec.com/index.html?start.htm
Die Hilfe zu STOP AC findest du hier: http://avrhelp.mcselec.com/index.html?stop.htm


ACSR.ACO
Das ist kein Befehl, sondern die Abkürzung für Analog Comparator Control and Status Register - Analog Comparator Output. Dieses Bit zeigt den Zustand des AC an und kann jederzeit abgefragt werden.

Die Hilfe zu diesem Bit findest du im ATmega8-Datenblatt im Kapitel "Analog Comparator".

Beispiel:
Code:
$regfile = "m8def.dat"

Led1 Alias Portb.0
Config Led1 = Output

Do
   Led1 = ACSR.ACO
Loop

End

Dieses Minimalbeispiel setzt voraus, dass an PB0 eine LED angeschlossen ist. Bei meinem Test sind an den Pins AIN1 und AIN0 jeweils ein 25k Poti als Spannungsteiler (zwischen VCC und GND) angeschlossen. Liegt an AIN0 eine höhere Spannung als an AIN1, dann leuchtet die LED.
Wie man sieht, muss der AC nicht gestartet werden. Der AC ist ständig aktiv -- außer man schaltet ihn explizit aus (mit ``STOP AC``).


Interrupt:
Der AC kann auch einen Interrupt auslösen. Der AC-Interrupt (ACI) kann bei LOW-HIGH-Flanke (=RISING), bei HIGH-LOW-Flanke (=FALLING) und bei Zustandsänderung (=TOGGLE) ausgelöst werden. Dieses Verhalten kann man mit dem Befehl ``CONFIG ACI`` einstellen.

Die Hilfe zu diesem Befehl findest du hier: http://avrhelp.mcselec.com/index.html?config_aci.htm

Beispiel:
Code:
$regfile = "m8def.dat"


Led1 Alias Portb.0
Config Led1 = Output

Led2 Alias Portb.1
Config Led2 = Output


Config Aci = On , Trigger = Toggle
On Aci On_aci
Enable Aci


Enable Interrupts


Do
   Led1 = ACSR.ACO
Loop

End


On_aci:
   Led2 = Not ACSR.ACO
Return

Dieses Beispiel setzt zusätzlich zum vorherigen Beispiel noch eine LED an PB1 voraus. Wenn man sich mit dem Testaufbau ein wenig spielt, dann fällt auf, dass die erste LED nach dem Start des Programms sofort entweder ein oder aus ist (je nach Poti-Einstellung). Die zweite LED wird erst dann ein- oder ausgeschaltet, wenn der Schwellwert durch Drehen an einem der Potis über- oder unterschritten wird. Der Interrupt wird also nur beim "Toggeln" ausgelöst.


Interne Spannungsreferenz
Setzt man das Bit ``ACSR.ACBG`` Analog Comparator Bandgap Select, dann wird intern an AIN0 eine 1,30 Volt (min: 1,15 V; max: 1,40 V) Bandgap-Referenzspannung angelegt. Der Pin PD6 wird damit frei.

Beispiel:
Code:
$regfile = "m8def.dat"


Led1 Alias Portb.0
Config Led1 = Output

ACSR.ACBG = 1 ' Interne Bandgap-Referenzspannung verwenden


Do
   Led1 = ACSR.ACO
Loop

End


Multiplexer
Der AC kann nicht nur mit den Pins AIN0 und AIN1 arbeiten. Statt AIN1 kann man den vom Analog/Digital-Converter (ADC) bekannten Multiplexer verwenden. Natürlich nur, wenn dieser nicht bereits vom ADC verwendet wird. Damit hat man für den Analog-Comparator die Pins ADC0 bis ADC5 (bei SMD-Bausteinen auch ADC6 und ADC7) zur Verfügung.
Da es (laut Roland Walter) nach dem Umschalten des Multiplexers bis zu 750 ns dauern kann, bis der AC mit der Messung fertig ist, muss man diese 750 ns warten bevor man das Bit ACSR.ACO auswertet. Wenn der ATmega8 mit 8 Mhz läuft, dann dauert ein Tick 125 ns (1 sec / 8000000 Ticks = 0,000000125). Um den µC 750 ns warten zu lassen braucht es sechs Ticks. Diese kann man am Einfachsten mit ``!NOP`` verbraten. Im Datenblatt finde ich nur den Hinweis auf 1 bis 2 Ticks, aber lieber ein paar Ticks zu viel als zu wenig warten. Wink

Ich verwende im Beispiel das erste Mal den ``MACRO``-Befehl. Damit kann man sich Schreibarbeit sparen und öfter wiederkehrende Befehle zusammenfassen. Bascom ersetzt beim Kompilieren des Programms den Makro-Aufruf durch den Inhalt des Makros. Ein Makro ist schneller als GOTO oder GOSUB und braucht weniger Laufzeitressourcen, aber es wird kein Flash-Speicherplatz gespart.

Beispiel:
Code:
$regfile = "m8def.dat"
$crystal = 8000000


Led1 Alias Portb.0
Config Led1 = Output

Led2 Alias Portb.1
Config Led2 = Output

ACSR.ACBG = 1      'Bandgap-Referenzspannung einschalten
SFIOR.ACME = 1     'Multiplexer einschalten


'Makro, welches bei 8 Mhz 750 ns wartet
Macro Wait750ns
   !NOP   '125 ns
   !NOP   '125 ns
   !NOP   '125 ns
   !NOP   '125 ns
   !NOP   '125 ns
   !NOP   '125 ns
End Macro


Do
   ADMUX = 0       'nach ADC0 umschalten
   Wait750ns       'warten
   Led1 = ACSR.ACO

   ADMUX = 1       'nach ADC1 umschalten
   Wait750ns       'warten
   Led2 = ACSR.ACO
Loop

End

In diesem Beispiel wird je eine LED an PB0 und PB1 erwartet. Die in den vorherigen Beispielen angesprochenen Potis befinden sich für dieses Beispiel an den Pins ADC0 (PC0) und ADC1 (PC1).

Viel Spaß beim Ausprobieren. Smile

lg
Gerold
Smile

_________________
http://halvar.at | http://sw3.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
gerold



Anmeldungsdatum: 27.07.2007
Beiträge: 927
Wohnort: Oberhofen im Inntal (Tirol)

BeitragVerfasst am: Mi 11.Jun 2008 20:18:45    Titel: Timer/Counter Bauteile finden Antworten mit Zitat

Hallo!

In diesem Beitrag möchte ich endlich auf die Timer/Counter eingehen. So ein Timer/Counter ist eine ziemlich nützliche Sache und der ATmega8 hat drei davon. Man kann damit Ereignisse zählen, genau getaktete Signale erzeugen und noch vieles mehr. Im weiteren Verlauf dieses und der nächsten Beiträge werde ich nur noch Timer statt Timer/Counter schreiben. Zur Erklärung: Als Timer zählt er den Systemtakt und als Counter zählt er externe Ereignisse.

Jetzt wirst du vielleicht fragen, warum man den Systemtakt zählen sollte. Die Sache ist ganz einfach. Ein Timer kann z.B. nach einer gewissen Anzahl an Ticks einen Interrupt auslösen. So hat man einen Interrupt, der immer im gleichen zeitlichen Abstand ausgelöst wird. So kann man einen Interrupt jede Sekunde auslösen lassen. Und dieser Sekundentakt ist dann so genau wie der an den µC angeschlossene Taktgeber (Quarz). Wenn man jede halbe Sekunde einen Interrupt auslösen lässt und bei jedem Interrupt einen Ausgangspin umschaltet (toggelt), dann hat man an diesem Pin eine Frequenz von genau 1 Hz anliegen. Lässt man den Timer öfter so einen Interrupt auslösen, dann wird die Frequenz höher. So können auch hohe Frequenzen bis in den MHz-Bereich (je nach angeschossenem Quarz) erzeugt werden.

Das Geniale dabei ist, so ein Timer funktioniert unabhängig von unserer Main-Loop. Der Timer zählt und zählt, egal ob unser Programm gerade voll im Stress ist oder auf einen Tastendruck wartet. Und das Umschalten von Pins oder das Erzeugen von "Pulsweiten-Modulation (PWM)"-Signalen passiert im Hintergrund. So kann man einen Schrittmotor oder einen Servo mit einer genauen Frequenz ansteuern, auch dann wenn unser Hauptprogramm gerade schläft oder voll im Stress ist.

Nicht jeder Timer kann alles. Timer0 ist der einfachste Timer. Mit ihm kann man eigentlich nur zählen. Timer1 ist der Mercedes unter den Timern. Mit ihm kann man alles machen. Timer2 ist ein Mittelding zwischen Timer0 und Timer1. Der hervorstechende Vorteil des Timer2 ist, dass er den Takt auch *direkt* von einem 32,768 kHz-Uhrenquarz abnehmen kann. Damit kann man mit dem ATmega8 eine ziemlich genau funktionierende Uhr aufbauen.

Timer0 kann von 0 bis 255 zählen. Timer0 ist ein 8 Bit-Timer. Timer1 kann von 0 bis 65535 zählen (16 Bit-Timer). Und Timer2 kann von 0 bis 255 zählen (8 Bit-Timer). Den Wert eines Timers kann man jederzeit auslesen und schreiben. Auf den Wert des Timer0 greift man über das Register TCNT0 zu. Da der Timer1 ein 16 Bit Timer ist, steht dessen Wert in den zwei 8 Bit-Registern TCNT1H und TCNT1L. Das "H" steht für High und das "L" für Low. Bascom stellt für den einfacheren Zugriff das Pseudo-Register TCNT1 zur Verfügung. Liest man dieses Pseudoregister aus, wird ein WORD und kein BYTE zurück gegeben. Der Wert des Timer2 ist über das Register TCNT2 erreichbar. Als Aliase für TCNT0, TCNT1 und TCNT2 können die Timer-Namen verwendet werden. Diese sind TIMER0, TIMER1 und TIMER2.


Overflow-Interrupt:
Ist ein Timer mit Zählen am Ende angekommen, dann läuft er über und beginnt wieder bei 0. Man kann den Timer so einstellen, dass genau bei so einem Überlauf (Overflow) ein Interrupt ausgelöst wird. Die Überlauf-Interrupts der Timer sind OVF0 (OVerFlow0), OVF1 (OVerFlow1) und OVF2 (OVerFlow2). Und wieder sind es die Namen der Timer, die man als Alias für die Interrupt-Namen verwenden kann (TIMER0, TIMER1 und TIMER2).


Prescaler:
Man kann einen Prescaler vor einen Timer schalten. Ein Prescaler arbeitet als Vorteiler. Er lässt nur jedes X'te Signal durch. Ein Prescaler übernimmt das zu zählende Signal und gibt erst dann ein Signal weiter, wenn eine einstellbare Anzahl an Ticks vergangen ist. Der Prescaler dividiert also das zu zählende Signal. Mit so einem Prescaler kann man das Signal durch 8, 64, 256 und 1024 dividieren, noch bevor es zum Timer kommt.

Wenn der Prescaler auf 8 eingestellt wird, dann lässt dieser nur jedes achte Signal durch. Bei einem Systemtakt von 8 MHz und einem Prescaler von 8, kommt am Timer 1 MHz an. Der Timer bekommt somit weniger zu tun und man kann die gewünschten Zeitabstände genauer einstellen.


Auf die verschiedenen Timer und deren Möglichkeiten werde ich in den nächsten Beiträgen eingehen.

mfg
Gerold
Smile

PS: Es gibt Ergänzungen zu diesem Beitrag unter http://halvar.at/elektronik/kleiner_bascom_avr_kurs/039_timer_counter/

.

_________________
http://halvar.at | http://sw3.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.


Zuletzt bearbeitet von gerold am Mi 25.Jun 2008 16:25:56, insgesamt 2-mal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Bauteiltöter



Anmeldungsdatum: 10.03.2008
Beiträge: 172

BeitragVerfasst am: Mi 11.Jun 2008 21:23:45    Titel: Bauteile finden Antworten mit Zitat

Ich finds cool, das es im moment hier so schnell weitergeht...
Lcd-Experimente sind im moment für mich leider nicht möglich, da ich mir das Lcd zerschossen habe, jetzt kann ich mich in Ruhe damit bescheftigen

Kompliment!

MfG Bauteiltöter
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
gerold



Anmeldungsdatum: 27.07.2007
Beiträge: 927
Wohnort: Oberhofen im Inntal (Tirol)

BeitragVerfasst am: Mi 11.Jun 2008 21:43:41    Titel: Bauteile finden Antworten mit Zitat

Bauteiltöter hat folgendes geschrieben:
da ich mir das Lcd zerschossen habe

Hallo Bauteiltöter!

Dann passt dein Spitzname also wirklich. Laughing

lg
Gerold
Smile

_________________
http://halvar.at | http://sw3.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Bauteiltöter



Anmeldungsdatum: 10.03.2008
Beiträge: 172

BeitragVerfasst am: Do 12.Jun 2008 07:10:19    Titel: Bauteile finden Antworten mit Zitat

ja, der passt manchmal Confused Confused Confused
Ich hatte 2 Power-leds, eine für 12V und eine für 5V. Pech wen der 12V-draht abbricht und auf die 5V fälllt Evil or Very Mad Evil or Very Mad

MfG Bauteiltöter
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
pcprofi



Anmeldungsdatum: 17.02.2008
Beiträge: 1459
Wohnort: Düren

BeitragVerfasst am: Fr 13.Jun 2008 10:48:12    Titel: Bauteile finden Antworten mit Zitat

Sooo, nachdem ja die µC-Geschichte bei mir lange am Geld gescheitert ist, habe ich mich mal drangegeben und habe einen ISP-Programmer entwickelt.
Platine ätzen und Bauteile drauflöten - schon gehts.

Die Kosten für den Programmer mit integrierter Stromversorgung belaufen sich bei mir auf:

Bauteile: 1,24€ + Versand bei CSD-Electronics

Platine hab ich unmengen an Rohmaterial da - ist aber auch nciht teuer.

Der ISP-Programmer hat die Pinbelegung des Atmel Evaluationboards und ist problemlos mit Ponyprog zu benutzen.

Wenn Interesse am Platinenlayout besteht, schreibt mich per PN an - mein Uploadplatz ist sozusagen voll...

Gruß Rainer

[edit]

Für die geübteren: Der 7805 ist geblockt - man siehts nur nicht, der Kerko ist zwischen 7805 und dem Elko.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Anzeige






Verfasst am: Heute 22:27:04    Titel: Bauteile finden

Nach oben
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    loetstelle.net Foren-Übersicht -> Microcontroller und DSP Alle Zeiten sind GMT + 1 Stunde
Gehe zu Seite Zurück  1, 2, 3 ... 10, 11, 12 ... 18, 19, 20  Weiter
Seite 11 von 20

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum nicht posten
Du kannst Dateien in diesem Forum nicht herunterladen


Powered by phpBB 2.x © 2001, 2002 phpBB Group

Sie sind Besucher Nr. 1222678
©opyright by Markus Vohburger 2005 All Rights reserved