Can Somebody help me to change the code written for chip Atmel 328pdef in BASCOM to code for chip attiny45? Kann jemand helfen Mihr die kode fur Atmel 328pdef in die kode fur attiny45 zu vervexeln? Kindest Regards/Schoene Gruesse und Danke Schoen! '----------------------------------------------------------------------- --- 'name : adc.bas 'copyright : (c) 1995-2009, MCS Electronics 'purpose : demonstrates AD converter 'micro : Mega48 'suited for demo : yes 'commercial addon needed : no '----------------------------------------------------------------------- --- $baud = 19200 'configure single mode and auto prescaler setting 'The single mode must be used with the GETADC() function 'The prescaler divides the internal clock by 2,4,8,16,32,64 or 128 'Because the ADC needs a clock from 50-200 KHz 'The AUTO feature, will select the highest clockrate possible Config Adc = Single , Prescaler = Auto , Reference = Avcc 'Now give power to the chip Start Adc 'With STOP ADC, you can remove the power from the chip 'Stop Adc Dim W As Word , Channel As Byte Config Portb.5 = Output Dim X As Integer Dim Y As Integer Dim Z As Integer Dim T As Integer X = 0 Y = 0 Z = 0 'now read A/D value from channel 0 Do Z = 0 W = Getadc(channel) Print W Incr Channel If Channel > 0 Then Channel = 0 Waitms 100 If W > 300 And W < 330 Then Y = 1 Else Y = Z Print Y End If If Y = 0 Then Incr T Else T = Z Print T End If If T > 100 Then X = 1 Portb.5 = 1 Else Portb.5 = 0 X = Z End If Print X Print Y Print Z Print T Loop End
I have no knowledge in BASCOM, but some things I can say: - ATTiny45 has a Portb.5, but this is normally used as Reset pin. Change it to one of the others (0 to 4), except of ADC channel 0. Otherwise you can only do High Voltage Programming in the future. - do not use ADC channel 0 because of the same reason: it is located on the reset pin. Use channel 1, 2 or 3. - Why do you increment the variable 'channel' if you only will use channel 0?
1 | W = Getadc(channel) |
2 | Print W |
3 | Incr Channel |
4 | ^^^^^^^^ |
5 | If Channel > 0 Then Channel = 0 |
6 | Waitms 100 |
- There is no information about the clock frequency. - I can not see where the prescaler is set.
1 | Dim W As Word , Channel As Byte |
2 | |
3 | Config Portb.5 = Output |
4 | |
5 | Dim X As Integer |
6 | Dim Y As Integer |
7 | Dim Z As Integer |
8 | Dim T As Integer |
9 | |
10 | X = 0 |
11 | Y = 0 |
12 | Z = 0 |
13 | |
14 | 'now read A/D value from channel 0 |
15 | Do |
16 | |
17 | Z = 0 |
18 | |
19 | W = Getadc(0) |
20 | Print W |
21 | Waitms 100 |
22 | |
23 | If W > 300 And W < 330 Then |
24 | Y = 1 |
25 | Else |
26 | Y = Z |
27 | Print Y |
28 | End If |
29 | |
30 | If Y = 0 Then |
31 | Incr T |
32 | Else |
33 | T = Z |
34 | Print T |
35 | End If |
36 | |
37 | If T > 100 Then |
38 | X = 1 |
39 | Portb.5 = 1 |
40 | Else |
41 | Portb.5 = 0 |
42 | X = Z |
43 | End If |
44 | |
45 | Print X |
46 | Print Y |
47 | Print Z |
48 | Print T |
49 | |
50 | Loop |
for better usability, so we can imagine what the intention of the Programflow is. So you use only Cannel zero, i 've banned the coresponding Lines from the code. >( Incr Channel > If Channel > 0 Then Channel = 0 ) You will have to manage the OutputPort B.5, bcs. not exist in ATTINY45, also no USART like in 328p. You can arrange and setup a softuart in BASCOM with "Open "comb.1:9600,8,n,1" For Output As #1", after Setup these with: "Config Com1 = 9600 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0" regard on your requirements (wich Portpin for Transmitting?) Better follow this link:http://avrhelp.mcselec.com/index.html?uart.htm scroll down to "SOFTWARE UART" StromTuner
thanks about the hints about the reset-pin. Its important! Use some other PIN for daily work on TIny45. BTW: What you want to do? StromTuner
Thank you AXEL and HILDEK for quick reply and I hope I can post sometimes some sollutions back for you! Jp, I know the ports must be changed but i don't know what else inside code because don't have experince with attiny45. However the Attiny input port for ADC wattersensor should be pin 7(PB2-channel 1) And output Led diode PIN 6 ..I hope it's possible.
I don't know BASCOM neither ... but in nativ C it would be possible. Another point: PRINT sounds like a serial output. This will also not work on the ATtiny I guess. at least Z and Channel seems to be obsolete. Z is always 0 as far as I can see and Channel never used.
:
Bearbeitet durch User
Danke Günter fur dein antwort aber "Print" ist nur fur die simulation notig das ich die vershiedene detaile in den program sehen kann. Schoene Gruesse Tomaz
macht den ganzen Code nur unnötig unübersichtlich. Trotzdem würde mich mal interessieren, was genau Du zu erreichen versuchst. Ich bin mir nämlich nicht sicher, ob der Code wirklich sinnvoll ist. Momentan würde ich sagen, die LED geht an, wenn bei 100 Messungen in Folge der Wandler-Wert NICHT zwischen 300 und 330 liegt. Das könnte man aber auch kürzer schreiben ;-) Wenn aber auch nur ein einziger Ausreißer dabei ist, bleibt die LED dunkel. Ist das wirklich so gewollt? Meist macht man einfach eine Mehrzahl von Messungen und bildet den Mittelwert daraus. Wenn der dann über/unter den Schwellwerten liegt, erfoglt eine Aktion. So fallen einzelne Ausreißer (die es beim ADC immer mal geben kann), nicht so sehr ins Gewicht. ach ja ... X ist wohl auch überflüssig ;-)
:
Bearbeitet durch User
Erst Mal eingerückt - Hoppla, lesbar ;) X = 0 Y = 0 Z = 0 Do Z = 0 W = Getadc(channel) Waitms 100 If W > 300 And W < 330 Then Y = 1 Else Y = Z (=0) End If If Y = 0 Then Incr T (kommt jetzt wo her?) Else T = Z (=0) End If If T > 100 Then X = 1 Portb.5 = 1 Else Portb.5 = 0 X = Z (=0) End If Loop Etwas strukturiert Do W = Getadc(channel) Waitms 100 If W > 300 And W < 330 Then IF Z=101 then Portb.5 = 1 INCR T Endif IF U<101 then INCR T ENDIF Else IF T!=0 then (oder <> ... kA, von BasCom) TPortb.5 = 0 End If T = 0 End If Loop Die doppelte IF-Abfrage sieht nicht schön aus. Das Programm spielt nicht laufend an den Ports rum und zählt die Variabeln nur, wenn es sein muß - weiter wird irgendwo ein Überlauf statt finden, Der den Ausgang im Original, zumindest kurz, LOW werden lässt.
Ich veis mein program ist einbichen eingeruckt aber er lauft auf dem 328pdef. Ich verde eure programe uberprufen. Danke zuerst fur eure muue!
Hi An 'meinem Listing' ist der Sinn des Programm nicht verändert - also wirst Du für den ATtiny45 die IN/OUT-Pins entsprechend ändern müssen, da B5, wie schon geschrieben wurde, der Reset-Pin ist. (kann zwar auch, irgendwie, als IO benutzt werden, verliert dabei aber die Reset-Funktion, Die für's normale Brennen benötigt wird - also dann nur per HV erneut beschrieben werden kann)
Danke Posti! Dein program ist sehr raffiniert geschrieben!.. Alzo ADC sensor soll pin 7(PB2-channel 1)sein? output fur Led diode PIN 6 oder ist das portb.1? Do W = Getadc(1) (1 - ist das rihtig?) Waitms 100 If W > 300 And W < 330 Then IF Z=101 then Portb.6 = 1 (portb.6 geht das? oder ist es portb.1?) INCR T Endif IF U<101 then INCR T ENDIF Else IF T!=0 then (oder <> ... kA, von BasCom) TPortb.6 = 0 (portb.6 geht das oder ist es portb.1?) End If T = 0 End If Loop
StromTuner > IF T!=0 then (oder <> ... kA, von BasCom) > TPortb.6 = 0 (portb.6 geht das oder ist es portb.1?) > End If IF T!=0 then '(oder <> ... kA, von BasCom) TPortb.6 = 0 '(portb.6 geht das oder ist es portb.1?) End If > IF U<101 then > INCR T IF T<101 then INCR T ENDIF Here is the PINOUT of the Attiny45: http://www.kentfrankovich.com/wp-content/uploads/2011/02/ATTiny45-Pinout.png If you would like to look inside the Datasheet... http://www.atmel.com/Images/Atmel-2586-AVR-8-bit-Microcontroller-ATtiny25-ATtiny45-ATtiny85_Datasheet.pdf Have fun StromTuner
Ah...ich habe ales versuht den ATTiny mit Bascom einzustellen aber es geht nicht.. alerdings funkzionier er auf den "tinyprogramer von sparkfun" an den ARDUINO 1.0.5 sehr gut. Kann mir jemand vieleicht helfen den Code an der anfang disen post von Bascom zu ARDUINO 1.0.5 zu vervexeln? Der jenige der mir hilf erwartet ihn ein sixpack bier in Slovenen von mir! Danke und schone Gruesse!
Hi Bier ist schon ein Argument, aber Slowenien (Slovenia?) ist doch schon 'nen Stück weit weg'. Mit BasCom kann ich gar nicht dienen, wenn, mit etwas Assembler. Was soll das Programm machen? Da sich mir der darin versteckte Sinn bis dato noch nicht offenbart hat, wäre Deine Problemstellung interessant. Akut liest das Programm einen ADC-Wert ein, wenn Dieser zwischen 301 und 329 liegt, wird eine Variabel hochgezählt, sonst wird die Variabel wirder gelöscht. Wenn Diese auf 100 hochgezählt ist, wird eine LED eingeschaltet. 'Riecht' nach Tasten Entprellen, dafür ist aber der ADC nicht nötig - es sei, Du versuchst mehrere Tasten an einer Widerstandskette einzulesen (R-2R). MfG
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.