PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Rechteckgenerator



epos
18.08.2006, 18:32
--------------------------------------------------------------------------------
Hallo! Also ich möcht mir nen rechtecksignalgenerator bauen. Eigentlich nciht schwer. einfach ne schaltung mit nem ne555. allerdings möcht ich die frequenz auch anzeigen. (7-segment anzeige)

ich hab noch ne c control micro über, aber nach kurzem überlegen, war klar, dass dies nicht (schwer) mit diesem microcontroller zu realisieren ist.
also ein anderer microcontroller. ein atmega8 scheint nach langem suchen gut geeignet. Allerdings ist es so, dass ich keine erfahrung mit diesem microcontroller habe. deshalb frage ich euch um hilfe.

zusammenfassend: ich möcht nen taktgenerator bauen bei dem die frequenz einstellbar ist und durch 7-segment anzeigen ausgegeben wird.
(frequenz mind 1-99 Hz) je größer der bereich desto besser.
da mit c control micro nicht (schwer) realisierbar am besten atmega8. (denn da findet man bei roboternetz sehr viele informationen)
wie sieht so ne schaltung aus?
wie sieht das programm für den atmega aus?
was brauche ich?

danke für eure hilfe! 8-[

robocat
18.08.2006, 18:50
ich wollte zuerst sowas hier vorschlagen
http://codefactory.dead-men.de/upload/43_servosteuerung2.png
aber da du die taktfrequenz angezeigt haben willst, kannst du den atmega als signalgenerator verwenden. der kennt dann auch die frequenz und kann diese auf einem LCD anzeigen.

hier ein bespiel fürs AVR Studio:

.NOLIST ; List-Output unterdrücken
.INCLUDE <m8def.inc> ; das gibt es für jeden Controllertyp
.LIST ; List-Output wieder aufdrehen
.CSEG ; was nun folgt, gehört in den FLASH-Speicher


;------------------------------------------------------
; Start Adresse 0000
;------------------------------------------------------
RESET:
rjmp INIT ; springen nach "INIT"

;------------------------------------------------------
; ISR VECTORS
;------------------------------------------------------
; ..... hier kommen dann die Sprungadressen für die Interrupts rein
; dazu kommen wir noch


.ORG INT_VECTORS_SIZE ; dadurch haben wir für die Vektoren Platz gelassen
INIT:
;------------------------------------------------------
; INITIALIZE
;------------------------------------------------------
ldi r24,high(RAMEND) ;Stack Pointer setzen
out SPH,r24 ; "RAMEND" ist in m8def.inc (s.o.) festgelegt
ldi r24,low(RAMEND) ;
out SPL,r24 ;

;------------------------------------------------------
; eigene Initialisierungen
;------------------------------------------------------
LDI R24, 255 ; der wert "255" = FF ins allgemeine Register R24
OUT DDRB, R24 ; das kommt ins Controll-register f. PortC
; dadurch ist das Port auf OUTPUT gestellt

;------------------------------------------------------
; HAUPTSCHLEIFE
;------------------------------------------------------
Hauptschleife:
LDI R24, 255
OUT PORTB, R24
; =============================
; delay loop generator
; 1000000 cycles:
; -----------------------------
; delaying 999999 cycles:
ldi R17, $09
WGLOOP0: ldi R18, $BC
WGLOOP1: ldi R19, $C4
WGLOOP2: dec R19
brne WGLOOP2
dec R18
brne WGLOOP1
dec R17
brne WGLOOP0
; -----------------------------
; delaying 1 cycle:
nop
; =============================
LDI R24, 0
OUT PORTB, R24
; =============================
; delay loop generator
; 1000000 cycles:
; -----------------------------
; delaying 999999 cycles:
ldi R17, $09
WGLOOP3: ldi R18, $BC
WGLOOP4: ldi R19, $C4
WGLOOP5: dec R19
brne WGLOOP5
dec R18
brne WGLOOP4
dec R17
brne WGLOOP3
; -----------------------------
; delaying 1 cycle:
nop
; =============================
rjmp Hauptschleife ; immer wiederholen

;------------------------------------------------------
; ENDE
;------------------------------------------------------
Ende:
rjmp Ende
die warteschleifen musst du natürlich anpassen, hier schaltet er für 1 mio. takte (bei 1MHz 1Sekunde) den port auf HIGH, dann 1 mio. takte auf low.

bitte nicht über den code schimpfen, das war mein erstes asm proggie, zusammengestöpselt aus beispiel-code.. ;)

gruesse, die katz

Rofo88
18.08.2006, 19:49
@robocat

Dein Code hat mit Bascom aber irgendwie nichts zu tun.

@epos

Mit nem Mega 8 ist ein Rechteck-Generator kein problem. Von der Frequnez sollte es bis in den Megaherzbereich gehen. Die 7 Segment-Anzeige würde ich gegen ein LCD tauchen da kann man einfach mehr Anzeigen und braucht nur 6 Ports am Mega8. Nun stellt sich noch die Frage wie man die Frequenz eingibt wobei mir hier spontan ein Drehimpulsgeber einfällt.

MfG

robocat
18.08.2006, 20:03
hi rofo88, hm hat er was von bascom gesagt? *nachles*
asouw, hups, ich bin im basic bereich! *doofguck*
der code geht aber, und vielleicht findet sich ein freundlicher BASCOMler, der ihn übersetzt. ansonsten nix für ungut.
ich würde auch ein kleines LCD verwenden, das spart schaltungsaufwand und ist flexibler.

epos
18.08.2006, 20:37
Danke für eure hilfe!
hab noch fragen!
also wenn ich mit dem atmega8 das rechtecksignal erzeuge, dann ist es doch so, dass die amplitude 5V beträgt.
ich möcht aber mehr! ( so 12V)
Also zurück zum ne555! damit lässt sich doch eine amplitude von so 12v und mehr erzeugen ,oda? die frequenz kann ich mit nem potentiometer einstellen.
den atmega8 nutz ich dann um die frequenz zu messen.
funktioniert das? habt ihr andere vorschläge?

und noch zum lcd display: ich bin noch blutiger anfänger was das programmieren in bascom angeht un soweit ich weiß ist die ansteuerung von nem lcd display nicht so einfach. (für mich)
wenn ich den atmega8 als frequenzmesser verwende hab ich doch genug freie ports. 2 7-segment anzeigen (weil 1Hz-99Hz) anzusteuern ist glaube ich nicht so schwer. ich hab vor einfach zwei bcd- 7 segment decoder zu verwenden. dazu brauch ich 8 ports also nicht so viele. ( ich weiß es gibt noch andere möglichkeiten: multiplexen.....)
was haltet ihr davon?
danke für eure mühe!!!!!!

Rofo88
18.08.2006, 20:47
Häng nen Transistor an den Ausgang der Dir die 12Volt schaltet.
Die Ansteuerung eines LCDs in Bascom ist kinderleicht...


Config Lcd = 16 * 2
Config Lcdpin = Pin , E = Portc.4 , Rs = Portc.5 , Db7 = Portc.3 , Db6 = Portc.2 , Db5 = Portc.1 , Db4 = Portc.0
Config Lcdbus = 4
Cursor Off
Cls
Lcd "Los gehst.."

ist nur so ein Beispiel

Also ich würde auf jeden Fall ein LCD nehmen und auf 7 Segment verzichten

Die Erzeugung der Rechtecke mit nem 555 und nur die Anzeige mit dem Mega zu machen ist auch ne Möglichkeit, währe mir aber schon wieder zu viel Lötaufwand

epos
18.08.2006, 21:10
ok! überzeugt! ich vergess die 7-segment anzeige und steig um auf ein lcd! da ich natürlich auch so wenig lötaufwand wie möglich haben will ist mir deine lösung nur recht! danke!

einen drehimpulsgeber halte ich auch für sehr gut. dann noch ein schalter zum ein- und ausschalten.

noch etwas bezüglich der amplitude. da ich den rechteckgnerator für universalinsatz möchte, will ich die amplitude verändern können.
wenn ich das mit nem spannungsregler mache sollte es funktionieren.
jetz wäre es natürlich gut, wenn ich auch die amplitude angezeigt bekäme.
also die spannung mit dem atmega8 ausgeben.
meine vorstellung: wenn ich den generator einschalte erscheint die frequenz. die kann ich mit dem drehimpulsgeber einstellen. wenn man auf den drehimpulsgeber draufdrückt ( ne zusätzliche leitung für zB. reset, haben die meisten drehimpulsgeber) soll die spannung der amplitude angezeigt werde. diese kann ich durch den spannungsregler einstellen. wenn ich wieder draufgdrücke komm ich zurück zur frequenzanzeige. wie findet ihr das?

etwas zu hoch?
wenn nicht wär ich für programmvorlagen, erklärungen oder gar das fertige programm ( das wär natürlich super!) sehr dankbar!

danke!!!!!

robocat
18.08.2006, 21:42
klar, das fände ich auch cool, wenn jedes fertige programm einfach angehupft kommt, sobald ich was poste.
ich war bisher gezwungen, so etwas selber zu bauen/programmieren, und dabei tritt sehr schnell die frage in den vordergrund, welche last (also wieviel ampere) dein generator schluckt.
auch der drehimpulsgeber will erstmal eingelesen werden, evtl möchtest du als nächstes noch eine strombegrenzung (nätürlich auch mit anzeige)..
ich finde du stellst dir das etwas leicht vor alles.
wir werden dir hier helfen wo es geht.. aber einfach ein "ich will das und das" und sofort wird es dir gesagt,.. das klappt nicht.

du könntest die aktuelle spannung mit dem AD wandler messen, spannungsteiler vorausgesetzt.

aber hast du überhaupt schon einen atmega geprogged? led blinkt?
ansonsten steig doch langsam ein, und nicht mit den anforderungen eines frequenzgenerators.

vor allem hast du nichts davon, wenn dir andere sagen, wie es geht. du musst es ja nachvollziehen und anwenden.

gruesse

epos
18.08.2006, 22:02
Hallo!
Na klar weiß ich, dass das was ich mir !!!!vorstelle!!!! alles andere als leicht ist.
es war ja auch nur eine !!!!Vorstellung!!!!.
Ein bisschen erfahrung mit nem atmega hab ich schon, da gibts ja auch gute tutorials im net.
das mit dem fertigen programm hab ich ja auch nicht so gemeint, dass ihr mir das programm schreibt! es ist nur so, dass vielleicht jemand soetwas ähnliches schon mal gemacht hat!
der generator soll für ungefähr 1A ausgelegt sein. sollte der strom mehr als ein ampere übersteigen schaltet sich der spannungsregler aus.
aber zurück zum atmega!
wie gesagt hab ich schon ein bisschen erfahreung mit nem atmega. aber sowas wie ein rechtecksignal erzeugt und die frequenz dieses signals auf einem lcd ausgegeben hab ich noch nicht. deshalb frag ich ja euch um hilfe. (is dieses forum für soetws nicht konzipiert?)
werd mich jetzt mal mit den atmegas beschäftigen!
Danke!
m.l.g.

Gento
19.08.2006, 00:11
Antwortautomaten/Für_Dich_Programieren ,erwartest Du hier oder den Wunsch das der Mega 8 auch noch Kaffee kochen kann ... als nächste Vorgabe, ohne selbst eine Zeile je Programiert zu haben ?

Gento

izaseba
19.08.2006, 00:47
Jetzt laßt den Mann doch in Ruhe, er hat ja nur Nett gefragt, ob jemand schonmal sowas gemacht hat...
Nein, hat keiner, dann muß er halt selber was tun.


aber sowas wie ein rechtecksignal erzeugt und die frequenz dieses signals auf einem lcd ausgegeben hab ich noch nicht. deshalb frag ich ja euch um hilfe

Rechteck zu erzeugen ist wohl der erste Schritt, wenn Du Blinkiblinki LED hinter Dir hast, hast Du schon ein Rechteck erzeugt.

Das ganze dann am besten mit einem schönem Timer ich würde mal den CTC Modus nehmen und OC1A bzw. OC1B toggeln lassen.

Gruß Sebastian

Rofo88
21.08.2006, 12:22
Also ich habe hier mal ein Project von nem Rechteckgenerator gefunden.

http://www.avr-asm-tutorial.net/avr_de/rechteckgen/rectgen_m8.html

Nachteil : ist in Assembler statt in Bascom

das kann er

* für ATMega8
* Einstellbarer Frequenzbereich: 0,25 Hz bis 8 MHz in 1024 Stufen
* Weiter Dynamikbereich der Frequenz ohne mechanisches Umschalten
* Umprogrammierung des Frequenzverlaufs möglich
* Einstellbare Pulsweite von 0,00 bis 100,00% in 1024 Stufen
* Pulsweiteneinstellung und Frequenz unabhängig voneinander
* Quarzbasis 16 MHz für stabile Frequenz
* Normaler und invertierter Ausgang
* Umschaltbare Polarität der Ausgänge (aktiv high, aktiv low)
* LCD-Anzeige mit umschaltbarer Anzeige von Frequenz, Zeit, Runden pro Minute, Pulsweite
* Anpassbar an ein- und zweizeilige LCD-Anzeigen mit 16 bis 40 Zeichen pro Zeile
* Englische oder deutsche Anzeigeversion wählbar


Hoffe das es Hilft