Hallo zusammen,
ich benötige ein Assembler-Programm für einen PIC16f76 oder
ähnlich/größer, wenn es Euch besser passt.
Es soll eine einfache Steuerfunktion mit mehreren Tasten und mehreren
Ausgängen realisiert werden.
Würde gern selbst machen, bin dennoch nicht so gut darin, das in kurzer
Zeit zu schaffen, leider... Ich müsste noch einiges dazu lernen.
Stehe momentan selbst unter Zeitdruck, brauche aber die Steuerung
dringend. Bin mir sicher, dass es für experten eine Kleinigkeit ist.
Nähere Informationen kann ich gern an seriöse Interessenten per Email
geben.
Danke!
Andreas schrieb:> Nähere Informationen kann ich gern an seriöse Interessenten per Email> geben.
Wieso nicht hier, dass man den Aufwand abschätzen kann bevor man sich
darauf einlässt?
ich versuche es in der Regel selbst mit MPLAB zu lösen. Als Anfänger ist
es schwer sich mit noch anderen Programmiersprachen zu beschäftigen. Es
braucht sehr lange um sich da durch zu finden.
Ich versuche mich in PIC-Assembler zurecht zu finden, und es wäre für
mich zu schwer noch eine andere Sprache zu erlernen. Es sei den, dass
programmieren damit einfacher wird???
Andreas schrieb:> Es sei den, dass> programmieren damit einfacher wird???
In 'C' ist es mMn einfacher. Hardwarenahe Dinge wie Timer, ADC,...
konfigurieren bist auf die Befehle um Register zu setzten gleich,
während Berechnungen, Schleifen und if-Abfragen einfacher werden. Von
Mikrochip gibt's kostenlose den XC8 C-Compiler und hier ein
PIC-C-Tutorial: http://pic-projekte.de/wordpress/?p=133
Andreas schrieb:> Nähere Informationen kann ich gern an seriöse Interessenten per Email> geben.
Na so dringend kann es nicht sein. Eine Email-Adresse hast du nicht
angegeben und angemeldet bist du auch nicht.
Die Vorgaben klingen für mich sehr nach Hausaufgaben... mach sie allein,
nur so lernst du was.
Woher kommt denn der Zeitdruck? Naht der Abgabetermin für ein Studien- /
Ausbildungsprojekt? In diesem Fall wäre die mehr mit Hilfe zur
Selbsthilfe geholfen, also erzähl doch mal etwas mehr. Was hast du
schon? Zeig mal einen Schaltplan, damit man weiß was da alles dran
hängt. Sicher gibt es auch ein Board dazu, wenn man das jetzt mal
schnell auf einem Evalboard zusammen strickt passt der resultierende
Code sicherlich nicht zu dem Board auf dem es dann später mal laufen
soll.
Ein paar Port-Pins abfragen und abhängig davon einige Ausgänge schalten
ist jetzt aber nicht soo kompliziert. Das sollte auch für einen Anfänger
an einem langen Samstag Nachmittag machbar sein. Stöber mal auf der
Seite von Microchip, da gibt es sicher einiges an Beispielcode und
natürlich auch die Datenblätter für deinen Controller, um die
Registernamen zum Lesen/Schreiben von Ports heraus zu bekommen.
Vermutlich hat MPLAB auch noch einen Simulator, dann kannst du gleich
direkt in der IDE probieren was dein Code so tut. Und bei
Detailproblemen hilft dir hier sicher gerne jemand weiter.
Im realen Leben später musst du übrigens dann da selber durch. Und wenn
man es neu-deutsch out-sourcen möchte, verursacht folgende Aussage einen
Preisanstieg um 400%:
> Stehe momentan selbst unter Zeitdruck, brauche aber die Steuerung> dringend. Bin mir sicher, dass es für experten eine Kleinigkeit ist.
1. Zeitdruck -> Express ist i.d.R. teurer
2. Dringend -> Abgabetermin droht, damit Erpressungspotential vorhanden
3. Kleinigkeit für Experten -> Keine Ahnung, dem kann man was vom Mond
erzählen ;)
Andreas schrieb:> Würde gern selbst machen, bin dennoch nicht so gut darin, das in kurzer> Zeit zu schaffen, leider... Ich müsste noch einiges dazu lernen.
Cloud-Working - einer stellt die Aufgabe in die Cloud, die anderen tun
die Arbeit. Find ich klasse, die Idee.
Keine Hausaufgaben, keine Anschlussarbeit. Dazu bin ich zu alt. Es ist
eine Idee, die evtl. marktfähig wäre??? Das weiss ich aber auch noch
nicht mal selbst. Würde aber gern ausprobieren, und das ist mir was
Wert...
Der PIC16f76 liegt selbst in Stückzahlen über 10k noch über 3€, wenn man
nur ein paar Ein- und Ausgänge verbinden will ist das eine teure Lösung,
zumal das Ding 14k Flash und 384 Bytes Ram hat. Und das Zeitargument
"damit kenn ich mich halt schon aus" zieht hier auch nicht,sonst hättest
du das in den letzten zwei Stunden schon gelöst...
Übrigens bekommt man für ca. 50 Cent auch M0 basierte Controller die man
bequem in C programmieren kann und hat deutlich mehr Leistung...
Andreas schrieb:> Würde aber gern ausprobieren, und das ist mir was> Wert...
Schau dich mal bei odesk.com oder aehnlichen Portalen um... da kannst du
sehr einfach kleine Auftragsarbeiten vergeben. Gegen geringes entgelt
natuerlich.
Hallo Andreas,
versuch es doch einfach selbst zu realisieren! Im Datenblatt ist das
recht eindeutig beschrieben. Nachstehend, am Beispiel des PIC16F876 ist
zu sehen wie einfach der ADC zu verwenden ist. Die "enhanced" PIC wie
z.B. der 16F182x, 16F193x und andere, verfuegen ueber eine interne
Referenspannung, gestuft 1024, 2048, 4096 mV.
Ueberhaupt ist die Konfiguration des ADC deutlich einfacher wie die
meist noch zusaetzlich erforderlichen Berechnungsroutien z.B. Umrechnung
Binaerwert zu Dezimal/Volt, LCD-Ausgabe usw.
mfG GroberKlotz
ADC-Initialisierung des PIC 16F876
Die externe Referenzspannung ist an Pin RA3/AN3/VREF
anzuschliessen, dies Konfiguration wird in Register
ADCON1,PCFG2:PCFG0 festgelegt.
Die Seitenangaben beziehen sich auf das Datenblatt des 16F876
;*********************************************************************
Init
;--PORTA is ADC_PORT
BANKSEL ADC_PORT
clrf ADC_PORT ;clear output latches
BANKSEL ADC_TRIS
movlw b'00100000' ;Configure RA5 as ADC-Input
movwf ADC_TRIS
; BANKSEL ADCON1 ;S.130 See below "ADC-Configuration"
; movlw b'00000110' ;Set RA7:RA0 as digital IO
; movwf ADCON1
;--ADC-CONFIGURATION
BANKSEL ADCON0 ;bank0 S.129
clrf ADCON0 ;b7:0=00000000
; ADCON0,ADCS1 ;b7:6=01 AD convers.clock = Fosc/8
bsf ADCON0,ADCS0 ;->ADCON1,ADCS2
bsf ADCON0,CHS2 ;b5:3=100 AD channel is AN4 (RA5)
; ADCON0,CHS1
; ADCON0,CHS0
; ADCON0,ADON ;b0=0 ADC is off (See sub "ADC")
;movlw b'01100000'
;movwf ADCON0
;
BANKSEL ADCON1 ;bank1 S.130
clrf ADCON1
bsf ADCON1,ADFM ;b7=1 ADC result = right justified
; ADCON1,ADCS2 ;b6=0 convers.clock Fosc/8
; ADCON1,PCFG3 ;b3:0=0010
; ADCON1,PCFG2 ;RA4:0 are analog, Vdd=Vref+, Vss=Vref-
bsf ADCON1,PCFG1
; ADCON1,PCFG0
;movlw b'10000010'
;movwf ADCON1
BANKSEL 0
;*********************************************************************
;*********************************************************************
Analog to Digital Conversion Routine
;*********************************************************************
; ADC
; To do an A/D Conversion, follow these steps:
; 1. Configure the A/D module:
; • Configure analog pins/voltage reference and digital I/O
(ADCON1)
; • Select A/D input channel (ADCON0)
; • Select A/D conversion clock (ADCON0)
; • Turn on A/D module (ADCON0)
; 2. Configure A/D interrupt (if desired):
; • Clear ADIF bit
; • Set ADIE bit
; • Set PEIE bit
; • Set GIE bit
; 3. Wait the required acquisition time.
; 4. Start conversion:
; • Set GO/DONE bit (ADCON0,GO_NOT_DONE)
; 5. Wait for A/D conversion ,to complete by either:
; • Polling for the GO/DONE bit to be cleared (interrupts disabled)
; OR
; • Waiting for the A/D interrupt
; 6. Read A/D Result ADRESH:ADRESL, clear bit ADIF if required.
; 7. For the next conversion, go to step 1 or step 2 as required.
; The A/D conversion time per bit is defined as TAD.
ADC
bsf ADCON0,ADON ;b0=1 Enable AD conversion bank0
bsf ADCON0,GO ;b2=1 Start AD conversion
movlw .8 * FOSC_MULT ;wait the required aquisition time
movwf tmp0 ;(TAD) = 25µs/cycles (Fosc=4MHz)
ADC_AquisLoop:
decfsz tmp0,f
GOTO ADC_AquisLoop
ADC_Loop:
btfsc ADCON0,GO ;b2=0? ADC conversion done?
GOTO ADC_Loop ;NO, try it again
;
#IFDEF __DEBUG ;Testergebnisse im DEBUG-Modus
movlw b'00000001' ;ADRESH:L=b'0000 0001 1110 0000'=480
movwf ADRESH ;
#ENDIF
;
movf ADRESH,w ;YES
movwf ACb1 ;MSB handover to BIN16_2DEZ
BANKSEL ADRESL ;bank1
;
#IFDEF __DEBUG ;Testergebnisse im DEBUG-Modus
movlw b'11100000'
movwf ADRESL ;ADRESH:L=b'0000 0001 1110 0000'=480
#ENDIF
;
movf ADRESL,w
BANKSEL 0
movwf ACb0 ;LSB handover to BIN16_2DEZ
RETURN
;*********************************************************************
Phan Tom schrieb:> Andreas schrieb:>> Würde gern selbst machen, bin dennoch nicht so gut darin, das in kurzer>> Zeit zu schaffen, leider... Ich müsste noch einiges dazu lernen.>> Cloud-Working - einer stellt die Aufgabe in die Cloud, die anderen tun> die Arbeit. Find ich klasse, die Idee.
Amazon Mechanical Turk, kennt ihr noch nicht?
Das ist genau das.
Fleissaufgaben in der Cloud für den Nebenverdienst Zuhause.
So wird das nichts - rede mit einem fachkundigen Freund, zu dem du
Vertrauen hast und lass den mal einschätzen, ob und wie das sinnvoll
wird. Du schränkst dich von vorneherein unnötig ein, indem du PIC und
Assembler vorgeben willst, ohne dafür richtige Gründe zu haben.
Hallo Andreas,
melde dich bitte im Forum an, hinterlege deine E-Mail Adresse damit man
dich auch erreichen kann.
Ich werde hier sicherlich nicht meine E-Mail Adresse Posten!
Wenn du hilfe benötigst, gerne.
PP
warum sind alle so agressiv und misstrauisch hier??? :-(
Ich bin ein Anfänger, habe keine Programmierer-Ausbildung und versuche
die Kunst des Programmierens zu erlernen.
Habe den Eindruck, dass ich etwas generelles nicht verstanden habe.
Einfache Vorgänge sind verständlich, aber wenn es etwas komplizierter
wird weiss ich nicht mehr wo ich anfangen soll.
Muss man Mathematiker sein um zu Programmieren???
Oder kriegt man mit der Übeung auch etwas hin?
Andreas Kran schrieb:> Habe den Eindruck, dass ich etwas generelles nicht verstanden habe.> Einfache Vorgänge sind verständlich, aber wenn es etwas komplizierter> wird weiss ich nicht mehr wo ich anfangen soll.
Dann würde es dir aber 100 mal mehr bringen wenn du erst einfache
Beispiele programmierst und beim konkreten Problem deinen Code hier
postest mit der Bitte dir einen Denkanstoss zu geben.
Aber du kommst wie 100 andere und sagst du willst programmieren lernen,
möchtest dazu aber ein fertiges Programm. Wir können programmieren und
wir wissen: So lernt man es NICHT!
Das ist als wenn du in ein Schreinerforum gehst und sagst du willst
selber Möbel bauen lernen, es soll dir jemand einen Tisch bauen, dass du
von Anschauen des Tischs lernst wie man den baut.
Assembler und PIC lernen, da ist www.sprut.de die erste Anlaufstelle.
Dort findest du auch jede Menge Beispielprojekte mit Code, Schaltung und
guter Beschreibung. So kannst du Schritt für Schritt in die Materie
eintauchen. So hatte ich das auch vor Jahren gelernt. Mehrere Wochen
Zeit solltest du aber einplanen. Und es hilft, wenn man schon mal in
Assembler programmiert hat, egal auf welcher CPU, einfach um ein Gefühl
für die Assemblerdenkweise zu bekommen.
Andreas schrieb:
> Nähere Informationen kann ich gern an seriöse Interessenten per Email> geben.
Ja so richtig wichtig war es wohl doch nicht, der Typ hat sich nicht
gemeldet.
Also dass du ein Programm haben willst finde ich ja noch ok, wäre schön
mit einer eigenen Idee dahinter
Du sagtest bei Interesse sollen wir mit dir schreiben...
Das hört sich an als ob du was verkaufen willst
Wenn du was grundlegendes nicht verstanden hast, dann würde ich dir
Assembler nicht als Einstieg empfehlen
Probier es mit Pascal, die Compiler sind da sehr gut und du bekommst
Fehlermeldung, die dir auch helfen besser zu werden
C ist dagegen nicht so optimal, da sollte man schon mehr Erfahrung haben
Zu Pascal und C findest du auch viele Bücher
bei Asm musst du dich früher oder später für einen entscheiden, ich
persönlich empfehle dir AVR Asm von Atmel, die Prozessorstruktur ist da
wesentlich leichter zu handhaben als die PICs
Also ASM auf dem PIC ist doch blanker Masochismus.
Das letzte Mal als ich einen Blick in diese Richtung geworfen habe war
das ein einziges Fest aus Bank-Switching und Co.
Wenn du wirklich ASM willst, dann doch bitte auf einem "braven" System.
Für den Einstieg würde ich entweder 8051 (weil der als
Akkumulator-Konstrukt sehr geradlinig arbeitet) oder AVR (weil ich
(persöhnlich) den Befehlssatz recht intuitiv finde, könnte an der
C-Ähnlichkeit liegen).
Wenngleich x86 ASM zwar erstmal logisch erscheint so ist man dann doch
erstmal etwas erschlagen von der schieren Menge an Verknüpfungen und
Verknotungen (so ging es mir).
Da ich ohnehin aus der C-Ecke auf den µC gekommen bin war bei mir der
AVR eigtl. der "natürlichste". Die Instruktionen sind von der
Denkstruktur nämlich ziemlich C-ähnlich. Ausserdem finde ich hat Atmel
einen guten Mittelweg gefunden mit ihrem Kern. Der Fakt, dass man sich
auf 32 Registern (mit ein paar Regeln) austoben kann erspart einige Lade
und Speicher Befehle im Vergleich zum 8051.
Eines kann ich dir aber jetzt schon sagen: Wenn du mehr als ein paar
blinkende LEDs hast, dann wünschst du dir C (und auf dem AVR kriegst du
das via gcc prompt geliefert ^^).
Max D. schrieb:> Das letzte Mal als ich einen Blick in diese Richtung geworfen habe war> das ein einziges Fest aus Bank-Switching und Co.
Wenn du ein Problem mit Banking hast, hast du dir eindeutig den falschen
PIC ausgesucht. Wie wär's mit einem PIC24?
Max H. schrieb:> Wenn du ein Problem mit Banking hast, hast du dir eindeutig den falschen> PIC ausgesucht. Wie wär's mit einem PIC24?
1. Der TO wollte explizit PIC16f76 und Assembler nutzen
2. Gibt es für PIC24 keine richtige freie Entwicklungslösung. MPLABx
kommt mit irgendwie kastriertem gcc daher (da geht dann nach einer
gewissen Zeit die Optimierung aus oder so).
Zeig mir wie ich mit ähnlichem Komfort wie bei AVRs für den PIC
optimierten C Code programmieren kann und ich geb ihnen nochmal eine
Chance (weil reizen würde mich die Power in nem DIP schon).
Max D. schrieb:> Max H. schrieb:>> Wenn du ein Problem mit Banking hast, hast du dir eindeutig den falschen>> PIC ausgesucht. Wie wär's mit einem PIC24?>> 1. Der TO wollte explizit PIC16f76 und Assembler nutzen>
DU hast ja anscheinend ein Problem mit Banking. Dem TO wäre es
vermutlich egal ;-)
> 2. Gibt es für PIC24 keine richtige freie Entwicklungslösung. MPLABx> kommt mit irgendwie kastriertem gcc daher (da geht dann nach einer> gewissen Zeit die Optimierung aus oder so).
Korrekt. Der Freeware-Compiler disabled die höchste Optimierungsstufe
bzgl. Size Optimisation, soweit icht weiss.
Und? Breaking News: Manche Sachen kosten Geld. Oder arbeitest DU umsonst
?
Und wenn man sich die Umsatzzahlen von Atmel & Microchip ansieht, dann
haben da anscheinend wenig Kunden ein Problem damit.
>> Zeig mir wie ich mit ähnlichem Komfort wie bei AVRs für den PIC> optimierten C Code programmieren kann und ich geb ihnen nochmal eine> Chance (weil reizen würde mich die Power in nem DIP schon).
Du meinst sowas wie PROGMEM hust ?
Ist zwar langsam komplett OT, aber wenn Du mal etwas mehr Power im DIP
brauchst, dann schau Dir doch mal die LPC800 Familie von NXP an.
Cortex0+, 30MHz im DIL8.
/regards
Andreas
Flammi schrieb:> Nein, kein Flamewar Thread AVR PIC C ASM....>> Der Threadersteller will PIC und ASM, fertig.
Mea Culpa.
Du hast völlig recht :-D
/regards
Andreas
Andreas K. schrieb:> warum sind alle so agressiv und misstrauisch hier??? :-(
Das geht nicht gegen dich, bloß PIC16-Assembler ist die absolute Härte,
das möchte ich nichtmal mit der Kneifzange anfassen.
Ist ja nicht nur der arg beschränkte Befehlssatz, das ständige Banking
und der lückenhafte SRAM.
Auch der Flash ist unterteilt in 256 Word Pages. Da muß man bei jedem
Call, Goto, Retlw erstmal umständlich das PCLATH berechnen.
Oder man fällt rein, wenn eine andere 256 Word Page angesprungen wird.
Da reicht es, irgendwo einen Befehl einzufügen und alles geht gegen den
Baum.
In C würde einem die ganze Mühsal wenigstens der Compiler abnehmen.
Bzw. andere Assembler (8051, AVR) haben einen lückenlosen und direkt
adressierbaren Adreßraum bis 64k.
Flammi schrieb:> Nein, kein Flamewar Thread AVR PIC C ASM....> Der Threadersteller will PIC und ASM, fertig.
Ja. Gleichzeitig charakterisiert er sich selber als
Andreas K. schrieb:> Ich bin ein Anfänger, habe keine Programmierer-Ausbildung und versuche> die Kunst des Programmierens zu erlernen.
Aber wenn er Anfänger ist, was sollen dann diese konkreten Vorgaben?
Warum muß es Assembler sein? Warum PIC? Warum dann ausgerechnet PIC16?
Es ist genau diese Diskrepanz, die bei den Leuten die Alarmglocken
angehen läßt. Der Frager kann ja nur entweder ein fauler Schüler sein
(Hausaufgabe) oder er ist ein Volldepp.
Axel Schwenke schrieb:> Der Frager kann ja nur entweder ein fauler Schüler sein> (Hausaufgabe) oder er ist ein Volldepp.
Das muss sich nicht ausschliessen :-D
Möglich wäre auch, dass ihm der uP, bzw. die Familie, vorgegeben ist,
z.B. durch die Schule.
Ist doch aber auch egal, oder ?
/regards
Andreas
Andreas H. schrieb:> Ist doch aber auch egal, oder ?
Eben nicht. Je mehr Leute hier erfolgreich ihre Hausaufgaben abladen und
sie erledigt zurückkriegen umso mehr Leute kommen dann eben mit ihren
Hausaufgaben hierher. Das hier ist ein Bastlerforum und keine
Hausaufgaben-Sklavenbude.
Max D. schrieb:> Eben nicht. Je mehr Leute hier erfolgreich ihre Hausaufgaben abladen und> sie erledigt zurückkriegen umso mehr Leute kommen dann eben mit ihren> Hausaufgaben hierher.
Man soll die Aufgabe i.A. auch nicht lösen. Sondern Hilfe zur
Selbsthilfe geben :-)
Grüße
Andreas
Andreas H. schrieb:> Man soll die Aufgabe i.A. auch nicht lösen. Sondern Hilfe zur> Selbsthilfe geben :-)
Lies dir den Titel vom Thread durch und sag das nochmal.
Max D. schrieb:> Andreas H. schrieb:>> Man soll die Aufgabe i.A. auch nicht lösen. Sondern Hilfe zur>> Selbsthilfe geben :-)>> Lies dir den Titel vom Thread durch und sag das nochmal.
Darum schrieb ich ja auch i.A.^^
Axel Schwenke schrieb:> Flammi schrieb:> Aber wenn er Anfänger ist, was sollen dann diese konkreten Vorgaben?> Warum muß es Assembler sein? Warum PIC? Warum dann ausgerechnet PIC16?
Na, weils halt vom Lehrer so vorgegeben ist ;-)
Irgenwer hat mir mal erzählt, dass die Uraltgurke 16F76 beim Leerkörper
sehr beliebt sein soll.
Ich versteh allerdings nicht so ganz, warum man die Kinderchen immer
noch mit den alten Dingern quält.
OT:
Was für einen Sinn haben eigentlich PIC16? Weil Stromsparen und Preis
kann es ja nicht sein. Auch nicht die Bastlerkompatiblität
- Ein STM32F03... ist billiger.
- Ein PIC24 braucht genauso wenig Strom
- Ein PIC32MX250 ist genaus Bastlerkompatibel.
Also, warum sucht man sich ausgerechnet einen PIC16 aus?
Andreas K. schrieb:> warum sind alle so agressiv und misstrauisch hier??? :-(
Weil einige hier nun mal Nerds sind. Die sehen nur ihre kleine
Technikwelt und könne sich überhaupt nicht vorstellen das es Menschen
gibt die so etwas weder können noch wollen.
Das Sie dann nichts Verleumder sind und sich auf das Niveau von Ars.....
begeben die mit Unterstellungen arbeiten werden Sie nie begreifen, sonst
hätten Sie es längst gelernt.
Meiner Meinung nach (und wohl auch mein Lieblingsthema) alles
Konsumenten der Verdummungsmedien wie Behörden- und Konzernfernsehen. Da
herrscht ein ähnlich stinkender Dreckston.
Max D. schrieb:> Je mehr Leute hier erfolgreich ihre Hausaufgaben abladen und> sie erledigt zurückkriegen umso mehr Leute kommen dann eben mit ihren> Hausaufgaben hierher.
Welcher Pädagoge beginnt seine Übungen mit einem 4GL Generator in den
der Schüler oder Student Assembler Code einbinden muss den er nicht
gelernt hat? Wenn dem so sei (gibt ja auch grottige Pädagogen) ist der
Fragesteller zu recht hier und man sollte ihm alle Unterstützung
zukommen lassen.